0

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

17

При переводе дат в формат 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 ответ(ов)

0

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

%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

0

Ваша строка 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, который вы можете использовать в дальнейшем!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь