Add time to datetime

19,694

Solution 1

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)

Solution 2

Firstly, based on the date string you are providing, the format seems to be wrong , you should use %y (small y) for 2 digit years, %Y (capital Y) is for 4 digit years.

Then you can add time to my_time using timedelta as follows, but the addition operation produces a new datetime object, does not change the my_time in place.

Hence, you will need to assign it back to your my_time like this -

>>> import datetime

>>> my_time = datetime.datetime.strptime('07/05/15', '%m/%d/%y')
>>> my_time = my_time + datetime.timedelta(hours=23,minutes=59)
>>> my_time
datetime.datetime(2015, 7, 5, 23, 59)
Share:
19,694
spen123
Author by

spen123

SOreadytohelp

Updated on June 04, 2022

Comments

  • spen123
    spen123 almost 2 years

    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?

    • Anand S Kumar
      Anand S Kumar almost 9 years
      What is the code you are using? It works for me
    • Scott Hunter
      Scott Hunter almost 9 years
      Are you asking if code you have "tried" but haven't posted works? If you know it doesn't work, what do you expect anyone to tell you about it without seeing the code?
  • jfs
    jfs over 8 years
    if you need to add an amount that is negative or more than one day then only the timedelta() solution would work.
  • Alexey Nikonov
    Alexey Nikonov over 4 years
    i dont know why but it throws error AttributeError: type object 'datetime.datetime' has no attribute 'timedelta'. My code looks like from datetime import datetime; newTime = passedTime + datetime.timedelta()
  • Alexey Nikonov
    Alexey Nikonov over 4 years
    this answer helped me to solve that issue stackoverflow.com/a/12906456/9277453
  • FlamePrinz
    FlamePrinz over 3 years
    If anyone has the same error that Alexey Nikonov had: You need to do import datetime; newTime = passedTime + datetime.timedelta(). Alexey essentially did import datetime; newTime = passedTime + datetime.datetime.timedelta() because of how he structured his import as from datetime import datetime.