Add time to datetime

spen123 picture spen123 · Jul 4, 2015 · Viewed 15.9k times · Source

I have a date string like this and then use strptime() So its like this

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%Y')

and now I want to add 23 hours and 59 minutes to my_time

I have tried .timedelta but it doesn't work? How could I do this?

Answer

Martijn Pieters picture Martijn Pieters · Jul 4, 2015

Add time afterwards; you can do so with the datetime.replace() method to produce a new datetime object:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time = my_time.replace(hour=23, minute=59)

The datetime.strptime() sets the hour and minute values to the default, 0. Note that for a two-digit year (like 15) you'd use %y, not %Y, which is for a four-digit year.

You could also use the datetime.combine() class method to pair up a date and a time object:

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time = datetime.datetime.combine(my_time.date(), datetime.time(23, 59))

If you feel you must use a timedelta(), take into account that adding it will again produce a new datetime object. You could use augmented assignment to add it 'in-place':

my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
my_time += datetime.timedelta(hours=23, minutes=59)

Demo:

>>> import datetime
>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
>>> my_time.replace(hour=23, minute=59)
datetime.datetime(2015, 7, 5, 23, 59)
>>> datetime.datetime.combine(my_time.date(), datetime.time(23, 59))
datetime.datetime(2015, 7, 5, 23, 59)
>>> my_time + datetime.timedelta(hours=23, minutes=59)
datetime.datetime(2015, 7, 5, 23, 59)