Python: как обрабатывать метки времени (ISO8601)

Я должен иметь дело в Python со строками, представляющимиISO8601 метки времени.

Поэтому моя строка меток времени имеет следующую форму:

timestamp = "2011-08-18T10:29:47+03:00"

В настоящее время я конвертирую их в python, используя:

timestamp = timestamp[:-6]
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S")

Но при этом я теряю всю информацию о часовом поясе. Я видел здесь много примеров о временных метках и питоне, к сожалению, никто не сохранял часовой пояс или просто восстанавливал задержку часового пояса, используя:

delay = timestamp[-6:]

Я также попробовал:

timestamp = "2011-08-18T10:29:47+03:00"
timestamp = datetime.datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%S%z")

но он вернулся

ValueError: 'z' is a bad directive in format '%Y-%m-%dT%H:%M:%S%z'

Можете ли вы дать некоторое представление?

 jfs20 авг. 2014 г., 11:28
 jfs08 янв. 2015 г., 08:20

Ответы на вопрос(2)

Вам нужно будет добавить внешний модуль, который обеспечивает поддержку часового пояса;pytz module предоставляет вам необходимую базу данных часовых поясов.

Вам нужно будет либо вручную проанализировать часовой пояс, чтобы создать часовой пояс Pytz, либо использовать пакет, подобныйzc.iso8601 или жеiso8601 сделать разбор для вас:

from zc.iso8601.parse import datetimetz
datetimetz(timestamp)
Решение Вопроса

питон iso8601 Модуль построен с замечательным методом parse_date, который может обрабатывать информацию о часовом поясе:

>>> import iso8601
>>> iso8601.parse_date("2007-01-25T12:00:00Z")
datetime.datetime(2007, 1, 25, 12, 0, tzinfo=<iso8601.iso8601.Utc ...>)

>>> iso8601.parse_date("2011-08-18T10:29:47+03:00")
datetime.datetime(2011, 8, 18, 10, 29, 47, tzinfo=<FixedOffset '+03:00'>)

Если вы хотите преобразовать его в другой часовой пояс, используйтеastimezone (TZ) метод

Если вам нужно получить дату UTC, вы можете использоватьutctimetuple () метод.

 18 дек. 2012 г., 17:29
Я не рекомендую использовать эту библиотеку. Последнее обновление было 2007, и оно не принимает все допустимые форматы.
 30 июл. 2012 г., 15:48
@ user601836: я обновил свой ответ двумя решениями, чтобы преобразовать полученную дату
 user60183630 июл. 2012 г., 15:37
Здорово. Можете ли вы сказать мне, как преобразовать результат в UTC + 0?

Ваш ответ на вопрос