datetime.strptime()的%Z可以接受哪些可能值?
Python里的datetime.strptime()函数说明中提到,它可以在%Z这个字段里支持时区。举个例子:
In [1]: datetime.strptime('2009-08-19 14:20:36 UTC', "%Y-%m-%d %H:%M:%S %Z")
Out[1]: datetime.datetime(2009, 8, 19, 14, 20, 36)
不过,我发现它似乎只支持“UTC”这个时区:
In [2]: datetime.strptime('2009-08-19 14:20:36 EDT', "%Y-%m-%d %H:%M:%S %Z")
ValueError: time data '2009-08-19 14:20:36 EDT' does not match format '%Y-%m-%d %H:%M:%S %Z'
In [3]: datetime.strptime('2009-08-19 14:20:36 America/Phoenix', "%Y-%m-%d %H:%M:%S %Z")
ValueError: time data '2009-08-19 14:20:36 America/Phoenix' does not match format '%Y-%m-%d %H:%M:%S %Z'
In [4]: datetime.strptime('2009-08-19 14:20:36 -0700', "%Y-%m-%d %H:%M:%S %Z")
ValueError: time data '2009-08-19 14:20:36 -0700' does not match format '%Y-%m-%d %H:%M:%S %Z'
那%Z这个字段到底期待什么样的格式呢?或者说,我该怎么表示除了UTC以外的其他时区呢?
2 个回答
5
这段内容来自于 time
模块,但我几乎可以肯定它也适用于 datetime
:
对于 %Z 这个指令的支持是基于 tzname 中的值,以及是否是夏令时。因此,这个支持是依赖于平台的,除了 UTC 和 GMT 这两个总是被认可的(它们被认为是不使用夏令时的时区)以外。
https://docs.python.org/library/time.html
在我的系统上:
>>> import time
>>> time.tzname
('PST', 'PDT')
在使用 datetime.strptime 时,如果用到其他的格式,就会出现错误。所以,最好查看一下你机器上可以使用的选项。
10
我了解到它们是格林威治标准时间(GMT)、协调世界时间(UTC),还有在time.tzname中列出的其他时间。
>>> for t in time.tzname:
... print t
...
Eastern Standard Time
Eastern Daylight Time
>>> datetime.strptime('2009-08-19 14:20:36 Eastern Standard Time', "%Y-%m-%d %H:%M:%S %Z")
datetime.datetime(2009, 8, 19, 14, 20, 36)
>>> datetime.strptime('2009-08-19 14:20:36 UTC', "%Y-%m-%d %H:%M:%S %Z")
datetime.datetime(2009, 8, 19, 14, 20, 36)
>>> datetime.strptime('2009-08-19 14:20:36 GMT', "%Y-%m-%d %H:%M:%S %Z")
datetime.datetime(2009, 8, 19, 14, 20, 36)
这些设置是针对特定机器的,当然,你的设置很可能会有所不同。