Python datetime - setting fixed hour and minute after using strptime to get day,month,year
Solution 1
Use datetime.replace
:
from datetime import datetime
dt = datetime.strptime('26 Sep 2012', '%d %b %Y')
newdatetime = dt.replace(hour=11, minute=59)
Also worth noting: datetime.replace
returns a new copy of the datetime
(since datetime
is immutable): it is like str.replace
in that regard.
Solution 2
datetime.replace() will provide the best options. Also, it provides facility for replacing day, year, and month.
Suppose we have a datetime
object and date is represented as:
"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
Solution 3
If you have a date as a datetime.datetime
(or a datetime.date
) instance and want to combine it via a time from a datetime.time
instance, then you can use the classmethod datetime.datetime.combine
:
import datetime
dt = datetime.datetime(2020, 7, 1)
t = datetime.time(12, 34)
combined = datetime.datetime.combine(dt.date(), t)
Solution 4
Shortcuts to convert datetime to max or min
import datetime
def dt_time_min(dt):
"""converts any datetime/date to new datetime with same date and time=0:00:00"""
return datetime.datetime.combine(dt, datetime.time.min)
def dt_time_max(dt):
"""converts any datetime/date to new datetime with same date and time=23:59:59.999999"""
return datetime.datetime.combine(dt, datetime.time.max)
Related videos on Youtube
user1678031
Updated on July 08, 2022Comments
-
user1678031 almost 2 years
I've successfully converted something of
26 Sep 2012
format to26-09-2012
using:datetime.strptime(request.POST['sample_date'],'%d %b %Y')
However, I don't know how to set the hour and minute of something like the above to 11:59. Does anyone know how to do this?
Note, this can be a future date or any random one, not just the current date.
-
nneonneo over 11 yearsYes, just do
date = datetime.strptime('26 Sep 2012', '%d %b %Y').replace(hour=11, minute=59)
. I used the extra variable so that the line wasn't too long :) -
nneonneo over 11 yearsAlso worth noting:
datetime.replace
returns a new copy of the datetime (sincedatetime
is immutable): it is likestr.replace
in that regard. -
PV8 about 5 yearsHow can i remove everything after '2016-06-01' so that hour minute and second disappear?
-
Samuel Dauzon over 4 yearsWhat's your answer's added value against nneonneo's answer posted 5 years before yours ?
-
Flimm over 3 years@PV8 If you want a datetime, run:
r = dt.replace(hour=0, minute=0, second=0, microsecond=0)
. If you want a date object, run:r = dt.date()