【问题标题】:Python xmlrpclib changes datetime object to DateTime instance on transmitPython xmlrpclib 在传输时将 datetime 对象更改为 DateTime 实例
【发布时间】:2016-01-04 13:12:07
【问题描述】:

使用 Python 2.6.x 的 xmlrpclib 在客户端和服务器之间交换的消息会在服务器端创建一种“实例”类型,而不是“日期时间”类型。 在客户端,我创建了一个新的

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 更改为 TrueFalse 根本没有任何区别。

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

为什么会这样?我希望接收方也有一个 tpye 'datetime.datetime'。

【问题讨论】:

  • 这太疯狂了。他们为什么要这样做?

标签: python datetime xml-rpc python-datetime xmlrpclib


【解决方案1】:

您必须将 xmlrpc.datetime 格式转换为 python datetime.datetime 对象。

我发现转换对象的最简单方法是:

import datetime

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

【讨论】:

    【解决方案2】:

    use_builtin_types=True 适合我。所有日期时间值的类型均为 &lt;class 'datetime.datetime'&gt;

    如果没有这个参数,所有的日期时间都是&lt;class 'xmlrpc.client.DateTime'&gt;

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

    Python3 XML-RPC client documentation 说: 过时的use_datetime 标志类似于use_builtin_types,但它仅适用于日期/时间值。

    【讨论】:

      猜你喜欢
      • 2013-02-18
      • 1970-01-01
      • 2017-07-25
      • 2012-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-14
      • 1970-01-01
      相关资源
      最近更新 更多