【发布时间】:2017-06-19 09:23:14
【问题描述】:
我有以下字符串 "2017-03-30 08:25:00CET",我想将其转换为 datetime tz-aware 对象。
根据this SO question,从python 3.2 可以只使用datetime 模块来完成。另外,从documentation,我看到了
%z | UTC offset in the form +HHMM or -HHMM (empty string if the object is naive). | (empty), +0000, -0400, +1030 %Z | Time zone name (empty string if the object is naive). | (empty), UTC, EST, CST
所以我尝试以下方法
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%Z')
我没有收到任何错误,但是我得到的对象不是 tz-aware
datetime.datetime(2017, 3, 30, 8, 25)
另一方面,如果我将我的字符串转换为"2017-03-30 08:25:00+0200",然后使用
datetime.strptime(dep_dt, '%Y-%m-%d %H:%M:%S%z')
我确实得到了一个 tz 感知日期时间:
datetime.datetime(2017, 3, 30, 8, 25, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))
任何想法为什么它适用于%z 但不适用于%Z?我做错了什么?
【问题讨论】:
-
与您相关的:stackoverflow.com/questions/1703546/…stackoverflow.com/questions/3305413/…。时区名称(例如
cet)不明确。您的第二个示例有效,因为您专门提供了时区偏移量+0200。在 dateutil 中使用解析器,或使用 tzinfo() 手动指定您的时区。 -
使用 Python 3.6,我通过执行
datetime.strptime("2017-03-30 08:25:00CET", '%Y-%m-%d %H:%M:%S%Z')得到一个ValueError: time data '2017-03-30 08:25:00CET' does not match format '%Y-%m-%d %H:%M:%S%Z',这与您所说的不同。 -
@CharlesMorris,感谢您的链接。我发现第二个特别有趣。对我来说,在文档中给出使用时区名称的可能性是没有意义的,但是它不起作用,因为它是模棱两可的。
-
这是这里描述的一个已知错误:bugs.python.org/issue22377
标签: python python-3.x timezone python-datetime