Подтвердить что ты не робот

Преобразование строки даты JSON в дату и время Python

При переводе дат в JSON javascript сохраняет даты в этом формате:

2012-05-29T19:30:03.283Z

Однако я не уверен, как получить это в объект datetime python. Я пробовал эти:

# Throws an error because the 'Z' isn't accounted for:
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f')

# Throws an error because '%Z' doesn't know what to do with the 'Z'
#  at the end of the string
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f%Z')

Я считаю, что javascript сохраняет строку в официальном формате ISO, поэтому кажется, что должен быть способ заставить python datetime.strptime() читать его?

4b9b3361

Ответ 1

Попробуйте следующий формат:

%Y-%m-%dT%H:%M:%S.%fZ

Например:

>>> datetime.datetime.strptime('2012-05-29T19:30:03.283Z', '%Y-%m-%dT%H:%M:%S.%fZ')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)

Z в дате означает, что его следует интерпретировать как время UTC, поэтому игнорирование этого не приведет к потере информации. Вы можете найти эту информацию здесь: http://www.w3.org/TR/NOTE-datetime

Ответ 2

Чтобы предоставить альтернативу, если вы не возражаете против установки пакета python-dateutil, вы можете использовать dateutil.parser.parse. Имейте в виду, что формат ввода догадывается parse; неверный ввод все равно может быть интерпретирован правильно или иначе.

Без часовой пояс

Если вы предпочитаете не устанавливать часовой пояс, что совершенно нормально, если вы представляете все время внутри себя только в формате UTC, используйте:

>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z', ignoretz=True)
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)

С часовым поясом

Обратите внимание, что в отличие от datetime.datetime.strptime, этот вызов по умолчанию parse автоматически сохраняет часовой пояс UTC.

>>> import dateutil.parser
>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=tzutc())

Если требуется утверждение теста для равенства, ожидаемый объект может быть сконструирован как:

>>> import datetime
>>> datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=dateutil.tz.tzutc())