Add time to datetime
Asked Answered
D

3

8

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?

Demobilize answered 4/7, 2015 at 8:12 Comment(2)
What is the code you are using? It works for mePfaff
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?Exarchate
B
14

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)
Babysitter answered 4/7, 2015 at 8:16 Comment(1)
if you need to add an amount that is negative or more than one day then only the timedelta() solution would work.Lark
P
10

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)
Pfaff answered 4/7, 2015 at 8:18 Comment(3)
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()Izy
this answer helped me to solve that issue https://mcmap.net/q/116385/-type-object-39-datetime-datetime-39-has-no-attribute-39-datetime-39Izy
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.Highfalutin
W
0

pandas way:

import pandas as pd 
df['time'] = pd.to_datetime(ddf['time']) + pd.Timedelta('16:00:00')
Whitebook answered 11/8, 2023 at 2:59 Comment(0)

© 2022 - 2025 — McMap. All rights reserved.