Python strptime () и часовые пояса?

У меня есть CSV dumpfile от Blackberry резервное копирование IPD, созданное использование IPDDump. Дата/строки времени в здесь выглядит примерно так (где EST австралийский часовой пояс):

Tue Jun 22 07:46:22 EST 2010

Я должен смочь проанализировать эту дату в Python. Сначала, я пытался использовать strptime() функция от даты и времени.

>>> datetime.datetime.strptime('Tue Jun 22 12:10:20 2010 EST', '%a %b %d %H:%M:%S %Y %Z')

Однако по некоторым причинам, datetime объект, который возвращается, кажется, не имеет никого tzinfo связанный с ним.

Я действительно читал на этой странице настолько, по-видимому, datetime.strptime тихо отбрасывания tzinfo, однако, я проверил документацию, и я ничто не могу найти к тому эффекту зарегистрированным здесь.

Я смог добраться, дата проанализировала пользование сторонней библиотекой Python, dateutil, однако мне все еще любопытно относительно того, как я использовал встроенное strptime() неправильно? Есть ли любой способ добраться strptime() играть приятно с часовыми поясами?

141
задан victorhooi 18 July 2014 в 08:24
поделиться

1 ответ

В документации модуля datetime говорится:

Возвращает datetime, соответствующее date_string, проанализированное в соответствии с форматом. Это эквивалентно datetime (* (time.strptime (date_string, format) [0: 6])) .

Видите, что [0: 6] ? Это дает вам (год, месяц, день, час, минута, секунда) . Ничего больше. Никакого упоминания часовых поясов.

Интересно, что [Win XP SP2, Python 2.6, 2.7] передача вашего примера в time.strptime не работает, но если вы уберете «% Z» и «EST», это сработает. . Также работает использование «UTC» или «GMT» вместо «EST». «PST» и «MEZ» не работают. Непонятно.

Стоит отметить, что это было обновлено, начиная с версии 3.2, и в той же документации теперь также говорится следующее:

Когда директива% z предоставляется методу strptime (), будет создан известный объект datetime. Цинфо результата будет установлено в экземпляр часового пояса.

Обратите внимание, что это не работает с% Z, поэтому регистр важен. См. Следующий пример:

In [1]: from datetime import datetime

In [2]: start_time = datetime.strptime('2018-04-18-17-04-30-AEST','%Y-%m-%d-%H-%M-%S-%Z')

In [3]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: None

In [4]: start_time = datetime.strptime('2018-04-18-17-04-30-+1000','%Y-%m-%d-%H-%M-%S-%z')

In [5]: print("TZ NAME: {tz}".format(tz=start_time.tzname()))
TZ NAME: UTC+10:00
47
ответ дан 23 November 2019 в 23:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: