#python-3.x #datetime #python-datetime
Вопрос:
У меня есть тип данных datetime, и я хочу отформатировать его как тип данных datetime, но я мог бы просто найти, как это сделать, если я это сделаю datetime-> string-> datetime
, и я хочу сделать это напрямую datetime->datetime
. Возможно ли это?
Это мой код:
from datetime import datetime
start_date = datetime.now()
res = datetime.strptime(start_date.strftime("%Y-%m-%dT%H:%M:%S.%fZ"), "%Y-%m-%dT%H:%M:%S.%fZ")
Комментарии:
1. не могли бы вы уточнить, что вы подразумеваете под » Я хочу отформатировать его как дату и время»? Обратите внимание, что объекты datetime не имеют формата , например, который может иметь строка. Это структуры данных для хранения информации о дате и времени. И у них есть
__str__
метод, который вызывается при их печати, который показывает сохраненную дату/время в определенном формате.2. Я также отметил, что у вас есть
Z
директива форматирования; если вам нужен объект datetime, представляющий UTC, используйтеdatetime.now(timezone.utc)
(после импортаtimezone
класса из модуля datetime).3. Привет, мистер Купс! В своем решении я передаю строку, а затем преобразую ее обратно в дату и время. Мне было интересно, можно ли получить объект datetime и преобразовать его в datetime напрямую, не передавая в виде строки. Например, формат datetime.format(строка), который возвращает дату и время; О «Z» я не могу изменить, это директива контракта, которая должна быть такой, поскольку моя исходная дата выглядит так: 2020-01-01T00:00:00.000 00:00Z, и я хочу формат %Y-%m-%dT%H:%M:%S.%fZ 🙂
4. таким образом, вы получаете дату/время из какого-либо API в виде строки типа данных? Если это так, то для изменения типа данных потребуется изменить API, не так ли?
5. вы имеете в виду, что получаете объект datetime, т. е. тип данных datetime ? а другой API, чего я ожидаю? струна? объект datetime?
Ответ №1:
вы можете получить некоторое удобство, используя методы изоформата datetime:
from datetime import datetime
# input date/time as string
s = "2020-01-01T00:00:00.000 00:00Z"
# to datetime object
# we can strip Z (zulu) since Python treats 00:00 as UTC already
dtobj = datetime.fromisoformat(s.strip('Z'))
print(repr(dtobj))
# datetime.datetime(2020, 1, 1, 0, 0, tzinfo=datetime.timezone.utc)
# back to string, format as input
# add the Z since this is not supported in Python by default
s_out = dtobj.isoformat(timespec='milliseconds') 'Z'
print(s_out)
# 2020-01-01T00:00:00.000 00:00Z
Комментарии:
1. Спасибо за ваш ответ, но в моем случае ваша переменная «s» — это дата-время в том формате, который вы написали. Я хочу преобразовать переменную «s», которая является временем даты, в формат «%Y-%m-%dT%H:%M:%S.%fZ», возвращающий время даты. Но поскольку я получаю переменную «s» в качестве даты-времени и мне нужно вернуть дату-время, я не хочу преобразовывать ее в строку, потому что для меня это не имеет смысла
2. @CatarinaNogueira итак, вы получаете объект datetime, как
dtobj
в моем примере. В нем указано UTC (Z/zulu). Но у него нет формата ; см. Мой первый комментарий к вопросу. Мы должны быть точны в формулировках, чтобы знать, о чем мы говорим 😉 Если этого ожидает API, в который вы передаете данные, вам не нужно ничего делать, так как вы не можете изменить какой-либо формат (только атрибуты, например, tzinfo).3. Еще раз здравствуйте! Спасибо, что уделили мне время и ответили. Теперь понял :)))