如何反序列化一个时区感知的日期时间对象? 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))
最佳答案
您应该将其序列化为日期时间和时区。时区应存储为时区名称,在本例中为 'Europe/Athens'
。您对日期时间使用什么格式不太重要,但我建议将日期时间序列化为与时区分开的单独字段,并使用 UTC,并明确如此。这看起来如何更明确完全取决于其余序列化格式的外观。
例如:
{datetime: "2014-02-15 19:58:25.866385+00:00", timezone: "Europe/Athens"}
关于python - 反序列化 Python 感知日期时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21808653/