Как получить дату в нужном формате?

Получаю дату в функции:

startdate = datetime.strptime(request.POST['startdate'], '%d.%m.%Y')
enddate = datetime.strptime(request.POST['enddate'], '%d.%m.%Y')

print(startdate)
print(enddate)

В итоге получаю:

2021-04-30 00:00:00
2021-04-28 00:00:00

А должен получать:

30.04.2021 
28.04.2021 

В чем проблема и как получить данную дату в нужном формате?


Ответы (1 шт):

Автор решения: MaxU

Функция datetime.strptime() парсит строку с датой/временем и возвращает объект типа datetime.datetime. При попытке вывести его на печать при помощи функции print(startdate) сначала вызывается метод startdate.__str__(), который по умолчанию преобразует datetime.datetime объект в строку используя формат 'Y%-%m-%d %H:%M:%S'. Поэтому вы получаете вывод в этом формате.

Пример:

In [231]: startdate = datetime.strptime('25.05.2021', '%d.%m.%Y')

In [232]: print(startdate)
2021-05-25 00:00:00

In [233]: startdate.__str__()
Out[233]: '2021-05-25 00:00:00'

In [234]: startdate
Out[234]: datetime.datetime(2021, 5, 25, 0, 0)

In [235]: startdate.__repr__()
Out[235]: 'datetime.datetime(2021, 5, 25, 0, 0)'

Для того чтобы преобразовать объект datetime.datetime в строку нужного формата можно воспользоваться методом datetime.strftime():

In [236]: startdate.strftime("%d.%m.%Y")
Out[236]: '25.05.2021'

или воспользоваться продвинутым форматированием строк (f-string):

In [240]: f"{startdate:%d.%m.%Y}"
Out[240]: '25.05.2021'

или обычным форматированием:

In [242]: "{:%d.%m.%Y}".format(startdate)
Out[242]: '25.05.2021'

UPD: метод qsstats.time_series(), о котором вы ничего не сказали в вопросе ожидает в качестве входных параметров объекты типа datetime.datetime:

values = qsstats.time_series(startdate, enddate) 
→ Ссылка