strptime()
функция не может обращаться %Z
часовой пояс, разбирающий очень хорошо. Только UTC и GMT действительно поддерживаются, и текущая стоимость time.tzname
. Посмотрите strptime
documenation:
Поддержка %Z
директива основана на ценностях, содержавшихся в tzname
и верен ли дневной свет
. Из-за этого это определенное для платформы за исключением признания UTC и GMT, которые всегда известны (и считаются часовыми поясами неперехода на летнее время).
Удаляя EST
часть вашего входа и %Z
часть вашей строки формата заставляет вещи работать:
>>> import time
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM EST', '%A, %B %d, %Y %I:%M:%s %p %Z')
Traceback (most recent call last):
File "", line 1, in
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/_strptime.py", line 454, in _strptime_time
return _strptime(data_string, format)[0]
File "/opt/local/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data 'Saturday, December 22, 2012 1:22:24 PM EST' does not match format '%A, %B %d, %Y %I:%M:%s %p %Z'
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM', '%A, %B %d, %Y %I:%M:%s %p')
time.struct_time(tm_year=2012, tm_mon=12, tm_mday=22, tm_hour=13, tm_min=22, tm_sec=24, tm_wday=5, tm_yday=357, tm_isdst=-1)
или замена часового пояса EST
с GMT
:
>>> time.strptime('Saturday, December 22, 2012 1:22:24 PM GMT', '%A, %B %d, %Y %I:%M:%s %p %Z')
time.struct_time(tm_year=2012, tm_mon=12, tm_mday=22, tm_hour=13, tm_min=22, tm_sec=24, tm_wday=5, tm_yday=357, tm_isdst=0)
Чтобы разобрать последовательности с часовым поясом кроме time.tzname
, GMT
или UTC
, пользуются различной библиотекой парсинга даты. dateutil
library имеет превосходное parse
function это обращается с часовыми поясами правильно:
>>> from dateutil.parser import parse
>>> parse('Saturday, December 22, 2012 1:22:24 PM EST', tzinfos={'EST': -18000})
datetime.datetime(2012, 12, 22, 13, 22, 24, tzinfo=tzoffset(u'EST', -18000))
Когда использование dateutil.parser.parse()
, вы делаете , должны обеспечить ваши собственные погашения часового пояса для вашего формата все же.