Convertir a marca de tiempo UTC

//parses some string into that format. datetime1 = datetime.strptime(somestring, "%Y-%m-%dT%H:%M:%S") //gets the seconds from the above date. timestamp1 = time.mktime(datetime1.timetuple()) //adds milliseconds to the above seconds. timeInMillis = int(timestamp1) * 1000 

¿Cómo puedo (en cualquier punto de ese código) convertir la fecha en formato UTC? He estado revisando la API durante lo que parece un siglo y no puedo encontrar nada en lo que pueda trabajar. ¿Alguien puede ayudar? Actualmente lo estoy convirtiendo en la hora del Este, creo que (sin embargo, estoy en GMT pero quiero UTC).

EDITAR: Le di la respuesta al tipo con el más cercano a lo que finalmente descubrí.

 datetime1 = datetime.strptime(somestring, someformat) timeInSeconds = calendar.timegm(datetime1.utctimetuple()) timeInMillis = timeInSeconds * 1000 

🙂

 def getDateAndTime(seconds=None): """ Converts seconds since the Epoch to a time tuple expressing UTC. When 'seconds' is not passed in, convert the current time instead. :Parameters: - `seconds`: time in seconds from the epoch. :Return: Time in UTC format. """ return time.strftime("%Y-%m-%dT%H:%M:%SZ", time.gmtime(seconds))` 

Esto convierte la hora local a UTC

 time.mktime(time.localtime(calendar.timegm(utc_time))) 

http://feihonghsu.blogspot.com/2008/02/converting-from-local-time-to-utc.html

Si la conversión de struct_time a seconds-since-the-epoch se realiza mediante mktime, esta conversión se realiza en la zona horaria local . No hay forma de decirle que use una zona horaria específica, ni siquiera UTC. El paquete estándar de ‘hora’ siempre asume que hay una hora en su zona horaria local.

datetime.utcfromtimestamp es probablemente lo que está buscando:

 >>> timestamp1 = time.mktime(datetime.now().timetuple()) >>> timestamp1 1256049553.0 >>> datetime.utcfromtimestamp(timestamp1) datetime.datetime(2009, 10, 20, 14, 39, 13) 

Creo que puedes usar el método utcoffset() :

 utc_time = datetime1 - datetime1.utcoffset() 

Los documentos dan un ejemplo de esto usando el método astimezone() aquí .

Además, si va a utilizar zonas horarias, es posible que desee consultar la biblioteca PyTZ, que cuenta con muchas herramientas útiles para convertir datetime en varias zonas horarias (incluso entre EST y UTC).

Con PyTZ:

 from datetime import datetime import pytz utc = pytz.utc eastern = pytz.timezone('US/Eastern') # Using datetime1 from the question datetime1 = datetime.strptime(somestring, "%Y-%m-%dT%H:%M:%S") # First, tell Python what timezone that string was in (you said Eastern) eastern_time = eastern.localize(datetime1) # Then convert it from Eastern to UTC utc_time = eastern_time.astimezone(utc) 

Probablemente quieras uno de estos dos:

 import time import datetime from email.Utils import formatdate rightnow = time.time() utc = datetime.datetime.utcfromtimestamp(rightnow) print utc print formatdate(rightnow) 

Las dos salidas se ven así

 2009-10-20 14:46:52.725000 Tue, 20 Oct 2009 14:46:52 -0000