How do I convert a datetime string in local time to a string in UTC time?
I'm sure I've done this before, but can't find it and SO will hopefully help me (and others) do that in future.
Clarification: For example, if I have
2008-09-17 14:02:00 in my local timezone (
+10), I'd like to generate a string with the equivalent
Also, from http://lucumr.pocoo.org/2011/7/15/eppur-si-muove/, note that in general this isn't possible as with DST and other issues there is no unique conversion from local time to UTC time.
Thanks @rofly, the full conversion from string to string is as follows:
time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(time.mktime(time.strptime("2008-09-17 14:04:00", "%Y-%m-%d %H:%M:%S"))))
My summary of the
string --> tuple (no timezone applied, so matches string)
local time tuple --> seconds since epoch (always local time)
seconds since epoch --> tuple in UTC
tuple in UTC --> seconds since epoch
seconds since epoch --> tuple in local timezone
First, parse the string into a naive datetime object. This is an instance of
datetime.datetime with no attached timezone information. See documentation for
datetime.strptime for information on parsing the date string.
pytz module, which comes with a full list of time zones + UTC. Figure out what the local timezone is, construct a timezone object from it, and manipulate and attach it to the naive datetime.
datetime.astimezone() method to convert the datetime to UTC.
Source code, using local timezone "America/Los_Angeles", for the string "2001-2-3 10:11:12":
import pytz, datetime local = pytz.timezone ("America/Los_Angeles") naive = datetime.datetime.strptime ("2001-2-3 10:11:12", "%Y-%m-%d %H:%M:%S") local_dt = local.localize(naive, is_dst=None) utc_dt = local_dt.astimezone(pytz.utc)
From there, you can use the
strftime() method to format the UTC datetime as needed:
utc_dt.strftime ("%Y-%m-%d %H:%M:%S")