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
но это относится только к значениям даты / времени.