首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >python日期时间格式混乱

python日期时间格式混乱
EN

Stack Overflow用户
提问于 2018-07-18 03:19:14
回答 1查看 265关注 0票数 1

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

代码语言:javascript
复制
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。我是不是漏掉了什么?

代码语言:javascript
复制
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'))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-18 03:22:04

它在这里正确地生成了时区

代码语言:javascript
复制
>>> 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()的使用-这些方法是时区幼稚的,所以它们不会保留时区信息。

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

代码语言:javascript
复制
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

代码语言:javascript
复制
t3 = datetime.datetime.fromtimestamp(stamp, tz=datetime.timezone.utc)

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

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51388783

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档