datetime.strptime()接受%Z的可能值是什么?

时间:2009-08-19 21:26:21

标签: python datetime

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 个答案:

答案 0 :(得分:9)

我认为他们是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)

当然,这些设置是特定于机器的,并且您的设置可能会有所不同。

答案 1 :(得分:4)

这是来自time模块,但我几乎可以肯定它适用于datetime

  

支持%Z指令   关于tzname和中包含的值   是否日光是真的。因为   这是特定于平台的,除了   用于识别UTC和GMT   永远都知道(并且被认为是   非夏令时区。

https://docs.python.org/library/time.html

在我的系统上:

>>> import time
>>> time.tzname
('PST', 'PDT')

在datetime.strptime中使用除了这些之外的任何内容都会导致异常。所以,看看你的机器上有什么可用。