Вопрос по timestamp, timezone, python – Python: как обрабатывать метки времени (ISO8601)

6

Я должен иметь дело в 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'

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

связанные с:ISO to datetime object: 'z' is a bad directive jfs
вы могли бы иметь в видуInternet Date/Time Format described in rfc 3339 (a profile of iso 8601) jfs

Ваш Ответ

2   ответа
1

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

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

from zc.iso8601.parse import datetimetz
datetimetz(timestamp)
3

питон 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 () метод.

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

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