libreria - time.clock python
Mostrar la hora en un huso horario diferente (6)
¿Hay una manera elegante de mostrar la hora actual en otra zona horaria?
Me gustaría tener algo con el espíritu general de:
cur = <Get the current time, perhaps datetime.datetime.now()>
print("Local time {}".format(cur))
print("Pacific time {}".format(<something like cur.tz(''PST'')>))
print("Israeli time {}".format(<something like cur.tz(''IST'')>))
Esta es mi implementació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'')
Necesito información de tiempo todo el tiempo, así que tengo este script .py ordenado en mi servidor que me permite simplemente seleccionar y deseleccionar qué zonas horarias quiero mostrar en orden de este a oeste.
Se 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í el código fuente es un archivo .py en mi github aquí: https://github.com/SpiRaiL/timezone O el enlace de archivo directo: https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py
En el archivo hay una lista como esta: simplemente ponga una ''p'' en los lugares que desea imprimir. Ponga una ''h'' para su propio huso horario si lo quiere 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''),
Puede usar 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''
Un método más simple:
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'')
Una forma, mediante la configuración de la zona horaria de la biblioteca 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''
Usted puede verificar esta pregunta .
O intenta usar pytz . Aquí puede encontrar una guía de instalación con algunos ejemplos de uso.