繁体   English   中英

python datetime格式混乱

[英]python datetime formatting confusion

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

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'))

它在此处正确生成了时区

>>> 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。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM