如果我错了,请更正我,但是假设我们有日期:
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'))
答案 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。