【发布时间】:2014-02-16 07:49:55
【问题描述】:
如何反序列化时区感知的日期时间对象? PYYAML 将自动以 ISO 格式正确保存它们,但在加载时会删除时区信息。使用 str(my_datetime_object) 可以生成正确的 ISO 字符串,但 datetime 模块无法将其转换回 datetime 对象。 (strftime 没有与 ISO 兼容的时区格式)
dateutil.parser.parse 做了一些奇怪但仍然不对的事情:
In [113]: x
Out[113]: datetime.datetime(2014, 2, 15, 21, 58, 25, 866385, tzinfo=<DstTzInfo 'Europe/Athens' EET+2:00:00 STD>)
In [114]: str(x)
Out[114]: '2014-02-15 21:58:25.866385+02:00'
In [115]: dateutil.parser.parse(str(x))
Out[115]: datetime.datetime(2014, 2, 15, 21, 58, 25, 866385, tzinfo=tzoffset(None, 7200))
【问题讨论】:
-
这是一个正确的结果。
7200 = 2 * 60 * 60 = hour_offset * 60*minutes/hour * 60*seconds/minute。它无法知道您在雅典,因为这是一个字符串,如果字符串中未显示信息,则会丢失信息。您将需要一种允许城镇的格式。 -
“反序列化可识别时区的日期时间对象”是什么意思?要将其转换为已知时区还是仅将其输出为字符串?
-
看看这个问题。许多答案都谈到了处理时区感知对象:stackoverflow.com/questions/969285/…
-
用户 - 检查。如果您将其写为答案,我会将其标记为正确。
标签: python datetime serialization timezone yaml