2014-01-30 7 views
0

Действительно застрял здесь. Я смотрел различные ответы, но зона их, похоже, работает (Python2.7)Python Преобразовать строку в локальную DateTime в UTC DateTime

У меня есть строка fileGenTime, представляющая время/дату. Мне нужно разобрать его на дату/время, а затем преобразовать его в UTC. Я попытался с помощью «pytz», а затем «dateutil», но я не знаю, почему он не будет работать .... Вот моя попытка ...

from datetime import datetime 
from dateutil import tz 

fileGenTime = 'Thu Jan 2 19:23:34 EST 2014' 
fileGenTime = fileGenTime.replace(' ',' ') #double spaces... 
wday, month, day, time, zone, year = fileGenTime.split(' ') 
hour, minute, second = time.split(':') 

localGenTime = datetime.strptime(day +' '+ month +' '+ year 
+' '+ hour +' '+ minute +' '+ second, '%d %b %Y %H %M %S') 

я первоначально пытался включая zone в эту последнюю строку и используя %Z в формате arg ... Теперь я пытаюсь преобразовать локальное время в один с часовым поясом, а затем использовать astimezone, чтобы преобразовать его в UTC.

localZone = tz.gettz(zone) 
localGenTime = localGenTime.replace(tzinfo = localZone) 

normalisedTimezone = tz.gettz('UTC') 
normalisedGenTime = localGenTime.astimezone(normalisedTimezone) 

Сообщение об ошибке я получаю говорит .... "ValueError: месяц должен быть в 1..12" .... а?

Я вытягиваю свои волосы! Любая помощь будет оценена!

Полный отслеживающий здесь ....

Traceback (most recent call last): 
    File "<interactive input>", line 1, in <module> 
    File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 32, in utcoffset 
    if self._isdst(dt): 
    File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 67, in _isdst 
    self._dstweeknumber) 
    File "C:\Python27\lib\site-packages\python_dateutil-1.5-py2.7.egg\dateutil\tzwin.py", line 166, in picknthweekday 
    first = datetime.datetime(year, month, 1, hour, minute) 
ValueError: month must be in 1..12 
+0

Не могли бы вы добавить полную трассу? –

+0

Отредактировано для включения traceback Nigel, спасибо – AlanF

+1

На моей машине все работает нормально. Ваша версия dateutil довольно старая. Можете ли вы попробовать его с более новой версией? – Bach

ответ

2

Похоже, что вы используете Windows, со старой версией dateutil и вы попали this dateutil bug.

Solutions (я пробовал оба оба работали):

  1. Обновление dateutile от версии 1.5 до версии 2.2
  2. Если по каким-то причинам вы не можете обновить, то вы можете удалить файлы Lib/site-packages/dateutil/tzwin.py и Lib/site-packages/dateutil/tzwin.pyc , Но это чистое зло. Я бы пошел с опцией №1.
+0

+1 для ссылки на ошибку. – Bach

+0

вариант 1 был ответом, спасибо mil. – AlanF

Смежные вопросы