Как мне проанализировать часовые пояса со смещением UTC в Python? - PullRequest
6 голосов
/ 19 августа 2009

Допустим, у меня есть часовой пояс, например "2009-08-18 13: 52: 54-04". Я могу разобрать большинство из них, используя следующую строку:

datetime.strptime(time_string, "%Y-%m-%d %H:%M:%S")

Однако я не могу заставить работать часовой пояс. Существует% Z, который обрабатывает текстовые часовые пояса («EST», «UTC» и т. Д.), Но я не вижу ничего, что может анализировать «-04».

Ответы [ 4 ]

23 голосов
/ 23 марта 2010

Может быть, вы могли бы использовать dateutil.parser.parse ? Этот метод также упоминается в wiki.python.org / WorkingWithTime .

>>> from dateutil.parser import parse
>>> parse("2009-08-18 13:52:54-04")
datetime.datetime(2009, 8, 18, 13, 52, 54, tzinfo=tzoffset(None, -14400))

(этот вопрос дубликат?)

3 голосов
/ 19 августа 2009

использовать Бабель , в частности parse_datetime .

0 голосов
/ 19 августа 2009

Я недавно столкнулся с той же проблемой и обошел ее, используя этот код:

gmt_offset_str = time_string[-3:]
gmt_offset_seconds = int(gmt_offset_str)*60*60
timestamp = time.strptime(time_string[:-4], '%Y-%m-%d %H:%M:%S')
return time.localtime(time.mktime(timestamp)-gmt_offset_seconds)

Мне также было бы интересно более элегантное решение.

0 голосов
/ 19 августа 2009

Вы можете сделать это непосредственно на конструкторе: class datetime.datetime(year, month, day[, hour[, minute[, second[, microsecond[, tzinfo ]]]]]), tzinfo - datetime.tzinfo объект с отсылкой.

tzinfo - это абстрактное базовое предложение, означающее, что этот класс не должен создаваться напрямую. Вам необходимо получить конкретный подкласс и (по крайней мере) предоставить реализации стандартных методов tzinfo, необходимых для используемых вами методов datetime. Модуль datetime не предоставляет никаких конкретных подклассов tzinfo.

Вам необходимо переопределить метод utcoffset(self, dt).

Возвращает смещение местного времени от UTC, в минутах к востоку от UTC. Если местное время к западу от UTC, это должно быть отрицательно. Обратите внимание, что это должно быть полное смещение от UTC; например, если объект tzinfo представляет настройки часового пояса и летнего времени, utcoffset () должен вернуть их сумму. Если смещение UTC неизвестно, верните None. В противном случае возвращаемое значение должно быть объектом timedelta, указывающим целое число минут в диапазоне от -1439 до 1439 включительно (1440 = 24 * 60; величина смещения должна быть меньше одного дня). Большинство реализаций utcoffset (), вероятно, будет выглядеть как одна из этих двух:

return CONSTANT # fixed-offset class

return CONSTANT + self.dst(dt) # daylight-aware class

Если utcoffset () не возвращает None, dst () также не должна возвращать None.

Реализация по умолчанию utcoffset () вызывает NotImplementedError.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...