Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What possible values does datetime.strptime() accept for %Z?

Python's datetime.strptime() is documented as supporting a timezone in the %Z field. So, for example:

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)

However, "UTC" seems to be the only timezone I can get it to support:

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'

What format is it expecting for %Z? Or, how do I represent a timezone other than UTC?

like image 237
mike Avatar asked Aug 19 '09 21:08

mike


2 Answers

I gather they are GMT, UTC, and whatever is listed in 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)

These settings are machine-specific, of course, and yours will be different in all likelihood.

like image 62
hughdbrown Avatar answered Sep 21 '22 02:09

hughdbrown


This is from the time module, but I'm almost certain it applies to datetime:

Support for the %Z directive is based on the values contained in tzname and whether daylight is true. Because of this, it is platform-specific except for recognizing UTC and GMT which are always known (and are considered to be non-daylight savings timezones).

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

On my system:

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

Using anything but these in datetime.strptime results in an exception. So, look to see what you have available on your machine.

like image 45
brianz Avatar answered Sep 24 '22 02:09

brianz