python datetime格式混乱

时间:2018-07-17 19:19:14

标签: python python-3.x datetime timezone

如果我错了,请更正我,但是假设我们有日期:

Wed, 27 Jun 2018 11:20:33 -0500

如果我们在python中使用datetime进行转换(datetime.datetime.strptime('Wed, 27 Jun 2018 11:20:33 -0500', '%a, %d %b %Y %H:%M:%S %z')),则会产生比UTC大1小时的时间,即12:20:33。但是,实际上这不应该是UTC-5(减去5小时)。我采用的是这种日期格式,该格式存储在XML文件中。他们中的许多人在时间戳记的末尾具有-0500或+0000。我在这里想念东西吗?

import datetime
dt = datetime.datetime.strptime('Wed, 27 Jun 2018 11:20:33 -0500',
                                 '%a, %d %b %Y %H:%M:%S %z')
print(dt.timestamp())

print(datetime.datetime.fromtimestamp(int(dt.timestamp())).strftime('%Y-%m-%d %H:%M:%S'))

1 个答案:

答案 0 :(得分:4)

它在此处正确生成了时区

>>> import datetime
>>> datetime.datetime.strptime('Wed, 27 Jun 2018 11:20:33 -0500', '%a, %d %b %Y %H:%M:%S %z')
datetime.datetime(2018, 6, 27, 11, 20, 33, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))

datetime.timedelta(-1, 68400)表示-5小时正确。

您应在问题中添加所有导致“错误”结果的步骤,以及您期望的结果。

编辑:既然您已经编辑了问题-您的问题来自.timestamp().fromtimestamp()的使用-这些方法都是时区纯稚的,因此它们不会保留时区信息。

如果需要,您必须自己存储它:

t = datetime.datetime.strptime('Wed, 27 Jun 2018 11:20:33 -0500', '%a, %d %b %Y %H:%M:%S %z')

stamp = t.timestamp()
stored_zone = t.tzinfo

t2 = datetime.datetime.fromtimestamp(stamp, tz=stored_zone)

这将再次生成具有相同时区的等效datetime对象,因此t == t2

t3 = datetime.datetime.fromtimestamp(stamp, tz=datetime.timezone.utc)

这将再次生成相同的日期时间,但是在utc时区,因此它将显示为16:20,但在内部它是同一时间,仍然是t == t3!只是时区不同,但是两者都代表同一时刻。

时区令人困惑。我建议多次阅读文档并测试所有内容。或者只是使用pytz。