2012-06-12 56 views
9

Quiero convertir la hora GMT en hora EST y obtener una marca de tiempo. Intenté lo siguiente, pero no sé cómo configurar la zona horaria.Cómo convertir hora GMT a hora EST utilizando python

time = "Tue, 12 Jun 2012 14:03:10 GMT" 
timestamp2 = time.mktime(time.strptime(time, '%a, %d %b %Y %H:%M:%S GMT')) 
+7

No hay forma de que el código que publicó se ejecute en absoluto, ya que llamó a una cadena 'time' y luego intentó utilizar una función del paquete' time' que ya no es accesible en ese nombre. – geoffspear

Respuesta

20

Las zonas horarias no están integradas en Python estándar; debe utilizar otra biblioteca. pytz es una buena opción.

>>> gmt = pytz.timezone('GMT') 
>>> eastern = pytz.timezone('US/Eastern') 
>>> time = "Tue, 12 Jun 2012 14:03:10 GMT" 
>>> date = datetime.datetime.strptime(time, '%a, %d %b %Y %H:%M:%S GMT') 
>>> date 
datetime.datetime(2012, 6, 12, 14, 3, 10) 
>>> dategmt = gmt.localize(date) 
>>> dategmt 
datetime.datetime(2012, 6, 12, 14, 3, 10, tzinfo=<StaticTzInfo 'GMT'>) 
>>> dateeastern = dategmt.astimezone(eastern) 
>>> dateeastern 
datetime.datetime(2012, 6, 12, 10, 3, 10, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>) 
3

Usando pytz

from datetime import datetime 
from pytz import timezone 
fmt = "%Y-%m-%d %H:%M:%S %Z%z" 
now_time = datetime.now(timezone('US/Eastern')) 
print now_time.strftime(fmt) 
0

Si es su zona horaria local y las reglas de zona horaria son los mismos durante el tiempo dado como lo son ahora, entonces podría utilizar la solución stdlib solo (a excepción de un poco de borde de los casos):

#!/usr/bin/env python 
from email.utils import parsedate_tz, mktime_tz 
from datetime import datetime 

timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT")) 
print(datetime.fromtimestamp(timestamp)) 
# -> 2012-06-12 10:03:10 

de lo contrario, necesitan datos de una base de datos histórica zona horaria para obtener el desplazamiento UTC correcta. pytz module proporciona acceso a the tz database:

#!/usr/bin/env python 
from email.utils import parsedate_tz, mktime_tz 
from datetime import datetime 
import pytz # $ pip install pytz 

timestamp = mktime_tz(parsedate_tz("Tue, 12 Jun 2012 14:03:10 GMT")) 
eastern_dt = datetime.fromtimestamp(timestamp, pytz.timezone('America/New_York')) 
print(eastern_dt.strftime('%a, %d %b %Y %H:%M:%S %z (%Z)')) 
# -> Tue, 12 Jun 2012 10:03:10 -0400 (EDT) 

Nota: POSIX timestamp es el mismo en todo el mundo, es decir, su zona horaria local no importa si usted quiere encontrar la marca de tiempo (a menos que su zona horaria es de "derecha" especie) . Aquí se muestra cómo convert a utc time to the timestamp.

Cuestiones relacionadas