13

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 

1 Answer 1

31

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.

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.