Python datetime - ustawienie stałej godziny i minuty po użyciu strptime do uzyskania dnia, miesiąca, roku

174

Udało mi się przekonwertować coś w 26 Sep 2012formacie na 26-09-2012użycie:

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

Jednak nie wiem, jak ustawić godzinę i minutę czegoś takiego jak powyżej na 11:59. Czy ktoś wie, jak to zrobić?

Uwaga, może to być data przyszła lub dowolna losowa, a nie tylko data bieżąca.

user1678031
źródło

Odpowiedzi:

363

Zastosowanie datetime.replace:

from datetime import datetime
date = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdate = date.replace(hour=11, minute=59)
nneonneo
źródło
Dziękuję za szybką odpowiedź! :) Ciekawe, czy można to zrobić bez dodatkowej zmiennej date? (Jestem nowicjuszem w Pythonie)
user1678031
2
Tak, po prostu zrób date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59). Użyłem dodatkowej zmiennej, aby linia nie była zbyt długa :)
nneonneo
14
Warto również zauważyć: datetime.replacezwraca nową kopię daty i godziny (ponieważ datetimejest niezmienna): tak jest str.replacepod tym względem.
nneonneo
Jak mogę usunąć wszystko po „2016-06-01”, aby godzina minuta i sekunda zniknęły?
PV8
46

datetime.replace () zapewni najlepsze opcje. Zapewnia również możliwość zamiany dnia, roku i miesiąca.

Załóżmy, że mamy datetimeobiekt, a data jest reprezentowana jako: "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
Abhay Chauhan
źródło
8
Jaka jest wartość dodana Twojej odpowiedzi w porównaniu z odpowiedzią Nneonneo opublikowaną 5 lat przed Twoją?
Samuel Dauzon