У меня есть 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()
играть приятно с часовыми поясами?
В документации модуля 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