Python datetime - установка фиксированных часов и минут после использования strptime для получения дня, месяца, года

174

Я успешно преобразовал что-то из 26 Sep 2012формата в 26-09-2012использование:

datetime.strptime(request.POST['sample_date'],'%d %b %Y')

Тем не менее, я не знаю, как установить часы и минуты для чего-то подобного выше в 11:59. Кто-нибудь знает как это сделать?

Обратите внимание, что это может быть будущая или любая случайная дата, а не только текущая дата.

user1678031
источник

Ответы:

363

Используйте datetime.replace:

from datetime import datetime
date = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdate = date.replace(hour=11, minute=59)
nneonneo
источник
Спасибо за быстрый ответ! :) Просто интересно, есть ли способ сделать это без дополнительной переменной даты? (Я новичок в Python)
user1678031
2
Да, просто делай date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59). Я использовал дополнительную переменную, чтобы строка не была слишком длинной :)
nneonneo
14
Также стоит отметить: datetime.replaceвозвращает новую копию даты и времени (поскольку datetimeона неизменна): это как str.replaceв этом отношении.
nneonneo
Как я могу удалить все после «2016-06-01», чтобы исчезли минута и секунда?
PV8
46

datetime.replace () предоставит лучшие варианты. Кроме того, он предоставляет возможность замены дня, года и месяца.

Предположим, у нас есть datetimeобъект и дата представлена ​​в виде: "2017-05-04"

>>> from datetime import datetime
>>> date = datetime.strptime('2017-05-04',"%Y-%m-%d")
>>> print(date)
2017-05-04 00:00:00
>>> date = date.replace(minute=59, hour=23, second=59, year=2018, month=6, day=1)
>>> print(date)
2018-06-01 23:59:59
Абхай Чаухан
источник
8
Какова ценность вашего ответа по сравнению с ответом nneonneo, опубликованным за 5 лет до вашего?
Сэмюэл Даузон