python - 反序列化 Python 感知日期时间

标签 python datetime serialization timezone yaml

如何反序列化一个时区感知的日期时间对象? 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/

相关文章:

javascript - 将日期范围转换为包含所有日期的数组

internet-explorer - ExtJs 日期未显示在 Internet Explorer/Mozilla 的网格中

serialization - 从匹配表达式返回任意 Encodable?

python - 如何按元素长度拆分排序列表

python - Django 查询具有唯一字段的项目

javascript - 如何以 12 小时 AM/PM 格式显示 JavaScript 日期时间?

java - 意外的 token (END_OBJECT),应为FIELD_NAME : missing property '@type' that is to contain type id

serialization - ElasticSearch 到 Spark RDD

python - 检查 python 中(某种)大数字的可分性

python - 根据其他数据框 Python 估算 NaN 值