Python xmlrpclib изменяет объект datetime на экземпляр DateTime при передаче

Сообщения, которыми обмениваются клиент и сервер с помощью xmlrpclib с использованием Python 2.6.x, создают тип "экземпляр" на стороне сервера вместо типа "дата / время". На стороне клиента я создаю новый

updateTime = datetime(year, month, day, hour, minute, second)
print type(updateTime)
print updateTime

результаты в

<type 'datetime.datetime'>
2015-10-07 10:21:52

при отправке словарь выглядит на стороне клиента следующим образом:

'updateTime': datetime.datetime(2015, 10, 7, 10, 21, 52)

но входящий словарь на стороне сервера выглядит так:

'updateTime': <DateTime '20151007T10:21:52' at 7f4dbf4ceb90>

печать типа и его строковое представление выглядит так:

<type 'instance'>
20151007T10:21:52

Мы используем xmlrpclib.ServerProxy, но изменение use_datetime на True или False не имеет никакого значения.

xmlrpclib.ServerProxy('https://'+rpc_server_addr, allow_none=True, use_datetime=True)

Почему это происходит? Я ожидал, что tpye 'datetime.datetime' также будет на стороне получателя.

2 ответа

Вы должны преобразовать формат xmlrpc.datetime в объект python datetime.datetime.

Самый простой способ, который я нашел для преобразования объекта:

import datetime

my_datetime = datetime.datetime.strptime(str(xmlrpc.datetime), '%Y%m%dT%H:%M:%S')

use_builtin_types=True работает для меня. Все значения даты и времени имеют тип <class 'datetime.datetime'>,

Без этого параметра все datetime были <class 'xmlrpc.client.DateTime'>

rpc = xmlrpc.client.ServerProxy('https://..../', use_builtin_types=True)

Документация клиента Python3 XML-RPC гласит: Устаревшее use_datetime флаг похож на use_builtin_types но это относится только к значениям даты / времени.

Другие вопросы по тегам