Python datetime - setting fixed hour and minute after using strptime to get day,month,year

PythonDateDatetimeTimeDate Manipulation

Python Problem Overview


I've successfully converted something of 26 Sep 2012 format to 26-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.

Python Solutions


Solution 1 - Python

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 - Python

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 - Python

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 - Python

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)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser1678031View Question on Stackoverflow
Solution 1 - PythonnneonneoView Answer on Stackoverflow
Solution 2 - PythonAbhay ChauhanView Answer on Stackoverflow
Solution 3 - PythonFlorian BruckerView Answer on Stackoverflow
Solution 4 - PythonpymenView Answer on Stackoverflow