Преобразование строки даты JSON в datetime в Python
При переводе дат в формат JSON JavaScript сохраняет даты в следующем формате:
2012-05-29T19:30:03.283Z
Однако я не уверен, как преобразовать эту строку в объект datetime в Python. Я пробовал следующие варианты:
# Выдает ошибку, так как не учитывает букву 'Z':
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f')
# Выдает ошибку, так как '%Z' не знает, что делать с буквой 'Z'
# в конце строки
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f%Z')
Я полагаю, что JavaScript сохраняет строку в официальном ISO-формате, так что, по идее, должна быть возможность использовать метод datetime.strptime()
в Python для её чтения. Как мне правильно преобразовать эту строку?
2 ответ(ов)
Попробуйте следующий формат:
%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
Ваша строка date_string
находится в формате ISO 8601, который включает в себя временную метку с указанием часового пояса (Z указывает на UTC). Однако метод fromisoformat
не работает с символом "Z". Вместо этого вы можете использовать метод datetime.datetime.strptime
или dateutil.parser.parse
для обработки этого формата. Вот пример, как это можно сделать:
from datetime import datetime
# Вашу строку в формате ISO
date_string = "2012-05-29T19:30:03.283Z"
# Удаляем 'Z' и создаем объект datetime
date_object = datetime.strptime(date_string[:-1], '%Y-%m-%dT%H:%M:%S.%f')
print(date_object)
Или, если вы хотите использовать dateutil
, что упрощает обработку:
from dateutil import parser
# Вашу строку в формате ISO
date_string = "2012-05-29T19:30:03.283Z"
# Создаем объект datetime
date_object = parser.isoparse(date_string)
print(date_object)
Оба способа вернут объект datetime
, который вы можете использовать в дальнейшем!
Преобразование даты в datetime в Python
Как получить день недели по заданной дате?
Как рассчитать количество дней между двумя заданными датами
Как вывести дату в стандартном формате?
Итерация по диапазону дат в Python