Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python datetime add

I have a datetime value in string format. How can I change the format from a "-" separated date to a "." separated date. I also need to add 6 hours to let the data be in my time zone.

s = '2013-08-11 09:48:49'
from datetime import datetime,timedelta
mytime = datetime.strptime(s,"%Y-%m-%d %H:%M:%S")
time = mytime.strftime("%Y.%m.%d %H:%M:%S")
dt = str(timedelta(minutes=6*60))  #6 hours
time+=dt
print time
print dt

I get the following result where it adds the six hours at the end and not to the nine:

2013.08.11 09:48:496:00:00
6:00:00
like image 749
Max Avatar asked Sep 15 '13 21:09

Max


People also ask

How do I add time to a datetime object?

Use the timedelta() class from the datetime module to add time to datetime, e.g. result = dt + timedelta(hours=2, minutes=25, seconds=24) .

How do I add days to a date in Python?

Use the timedelta() class from the datetime module to add days to a date, e.g. result_1 = date_1 + timedelta(days=3) .

How do you add 1 second to time in Python?

Use the timedelta() class from the datetime module to add seconds to datetime, e.g. result = dt + timedelta(seconds=24) .


1 Answers

You are adding the string representation of the timedelta():

>>> from datetime import timedelta
>>> print timedelta(minutes=6*60)
6:00:00

Sum datetime and timedelta objects, not their string representations; only create a string after summing the objects:

from datetime import datetime, timedelta
s = '2013-08-11 09:48:49'
mytime = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
mytime += timedelta(hours=6)
print mytime.strftime("%Y.%m.%d %H:%M:%S")

This results in:

>>> from datetime import datetime, timedelta
>>> s = '2013-08-11 09:48:49'
>>> mytime = datetime.strptime(s, "%Y-%m-%d %H:%M:%S")
>>> mytime += timedelta(hours=6)
>>> print mytime.strftime("%Y.%m.%d %H:%M:%S")
2013.08.11 15:48:49

However, you probably want to use real timezone objects instead, I recommend you use the pytz library:

>>> from pytz import timezone, utc
>>> eastern = timezone('US/Eastern')
>>> utctime = utc.localize(datetime.strptime(s, "%Y-%m-%d %H:%M:%S"))
>>> local_tz = utctime.astimezone(eastern)
>>> print mytime.strftime("%Y.%m.%d %H:%M:%S")
2013.08.11 15:48:49

This will take into account daylight saving time too, for example.

like image 98
Martijn Pieters Avatar answered Oct 18 '22 02:10

Martijn Pieters