[英]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.