datetime.strptime()的%Z可以接受哪些可能值?

13 投票
2 回答
17133 浏览
提问于 2025-04-15 13:43

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)

这些设置是针对特定机器的,当然,你的设置很可能会有所不同。

撰写回答