如果我错了,请纠正我,但假设我们有日期:
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'))
发布于 2018-07-18 03:22:04
它在这里正确地生成了时区
>>> 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。
https://stackoverflow.com/questions/51388783
复制相似问题