2009-09-09 75 views
31

¿Existe alguna manera elegante de mostrar la hora actual en otra zona horaria?Python: muestra la hora en un huso horario diferente

Me gustaría tener algo con el espíritu general de:

cur=<Get the current time, perhaps datetime.datetime.now()> 
print "Local time ", cur 
print "Pacific time ", <something like cur.tz('PST')> 
print "Israeli time ", <something like cur.tz('IST')> 

¿Alguna idea?

+0

duplicado exacto de: http://stackoverflow.com/questions/117514/how-do-i-use-timezones-with-a-datetime-object-in-python –

+0

Gracias. No lo encontré cuando busqué el tema. –

Respuesta

38

podría utilizar la biblioteca de pytz:

>>> from datetime import datetime 
>>> import pytz 
>>> utc = pytz.utc 
>>> utc.zone 
'UTC' 
>>> eastern = pytz.timezone('US/Eastern') 
>>> eastern.zone 
'US/Eastern' 
>>> amsterdam = pytz.timezone('Europe/Amsterdam') 
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z' 

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) 
>>> print loc_dt.strftime(fmt) 
2002-10-27 06:00:00 EST-0500 

>>> ams_dt = loc_dt.astimezone(amsterdam) 
>>> ams_dt.strftime(fmt) 
'2002-10-27 12:00:00 CET+0100' 
+0

+1 ¡Exactamente lo que necesitaba, gracias! –

+1

Para la parte de la 'hora actual' de la pregunta, puede comenzar con 'loc_dt = pytz.utc.localize (datetime.utcnow())' en lugar de una constante – patricksurry

0

Puede comprobar this question.

O intenta usar pytz. Aquí puede encontrar una guía de instalación con algunos ejemplos de uso.

7

Una forma, a través de la configuración de zona horaria de la biblioteca de C, es

>>> cur=time.time() 
>>> os.environ["TZ"]="US/Pacific" 
>>> time.tzset() 
>>> time.strftime("%T %Z", time.localtime(cur)) 
'03:09:51 PDT' 
>>> os.environ["TZ"]="GMT" 
>>> time.strftime("%T %Z", time.localtime(cur)) 
'10:09:51 GMT' 
+1

Esto solo funciona en Unix de acuerdo con la documentación. Sin embargo, no estoy seguro si eso hace la diferencia aquí. –

+1

Necesitaba una solución que no utilizara pytz y solo necesita ejecutarse en sistemas Linux, por lo que es perfecto – Xandaros

+0

Este funciona perfectamente en AWS Lambda sin pytz. Muchas gracias. – sid8491

73

Un método más sencillo:

from datetime import datetime 
from pytz import timezone  

south_africa = timezone('Africa/Johannesburg') 
sa_time = datetime.now(south_africa) 
print sa_time.strftime('%Y-%m-%d_%H-%M-%S') 
+1

sí, ¡una versión mucho más limpia! – oDDsKooL

2

Ésta es mi aplicación:

from datetime import datetime 
from pytz import timezone 

def local_time(zone='Asia/Jerusalem'): 
    other_zone = timezone(zone) 
    other_zone_time = datetime.now(other_zone) 
    return other_zone_time.strftime('%T') 
+0

no diferente de la anterior. solo función formateada y aspecto más limpio. Lo agregaré como un comentario. oh ... No puedo comentar. – OLS

-1

Necesito hora información de todos los tiempos, así que tengo este limpio script .py en mi servidor que me permite simplemente seleccionar y anular la selección de las zonas horarias que tengo ant para mostrar en orden de este a oeste.

imprime así:

Australia/Sydney : 2016-02-09 03:52:29 AEDT+1100 
Asia/Singapore  : 2016-02-09 00:52:29 SGT+0800 
Asia/Hong_Kong  : 2016-02-09 00:52:29 HKT+0800 
EET     : 2016-02-08 18:52:29 EET+0200 
CET     : 2016-02-08 17:52:29 CET+0100  <- you are HERE 
UTC     : 2016-02-08 16:52:29 UTC+0000 
Europe/London  : 2016-02-08 16:52:29 GMT+0000 
America/New_York : 2016-02-08 11:52:29 EST-0500 
America/Los_Angeles : 2016-02-08 08:52:29 PST-0800 

Aquí código fuente es un archivo .py en mi github aquí: https://github.com/SpiRaiL/timezone o el enlace directo a los archivos: https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py

En el archivo es una lista así: Simplemente ponga una 'p' en los lugares que desea imprimir. Ponga una 'h' para su propia zona horaria si lo desea especialmente marcado.

(' ','America/Adak'),        (' ','Africa/Abidjan'),        (' ','Atlantic/Azores'),       (' ','GB'), 
(' ','America/Anchorage'),       (' ','Africa/Accra'),        (' ','Atlantic/Bermuda'),       (' ','GB-Eire'), 
(' ','America/Anguilla'),       (' ','Africa/Addis_Ababa'),       (' ','Atlantic/Canary'),       (' ','GMT'), 
(' ','America/Antigua'),       (' ','Africa/Algiers'),        (' ','Atlantic/Cape_Verde'),      (' ','GMT+0'), 
(' ','America/Araguaina'),       (' ','Africa/Asmara'),        (' ','Atlantic/Faeroe'),       (' ','GMT-0'), 
(' ','America/Argentina/Buenos_Aires'),    (' ','Africa/Asmera'),        (' ','Atlantic/Faroe'),        (' ','GMT0'), 
(' ','America/Argentina/Catamarca'),    (' ','Africa/Bamako'),        (' ','Atlantic/Jan_Mayen'),       (' ','Greenwich'), 
(' ','America/Argentina/ComodRivadavia'),   (' ','Africa/Bangui'),        (' ','Atlantic/Madeira'),       (' ','HST'), 
(' ','America/Argentina/Cordoba'),     (' ','Africa/Banjul'),        (' ','Atlantic/Reykjavik'),       (' ','Hongkong'), 
Cuestiones relacionadas