2009-09-09 15 views
31

C'è un modo elegante per visualizzare l'ora corrente in un altro fuso orario?Python: visualizza l'ora in un fuso orario diverso

Mi piacerebbe avere qualcosa con lo spirito generale di:

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')> 

Tutte le idee?

+0

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

+0

Grazie. Non l'ho trovato quando ho cercato l'argomento. –

risposta

38

è possibile utilizzare la libreria 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 Esattamente quello di cui avevo bisogno, grazie! –

+1

Per la parte "tempo corrente" della domanda, è possibile iniziare con 'loc_dt = pytz.utc.localize (datetime.utcnow())' invece di una costante – patricksurry

0

È possibile controllare this question.

Oppure provare a utilizzare pytz. Qui puoi trovare una guida all'installazione con alcuni esempi di utilizzo.

7

Un modo, attraverso l'impostazione del fuso orario della biblioteca C, è

>>> 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

Questo funziona solo in Unix in base alla documentazione. Non sono sicuro se ciò faccia la differenza qui però. –

+1

Avevo bisogno di una soluzione che non usasse pytz e necessitasse solo di funzionare su sistemi Linux, quindi questo è perfetto – Xandaros

+0

Questo funziona perfettamente in AWS Lambda senza pytz. Grazie molto. – sid8491

73

Un metodo più semplice:

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ì, versione molto più pulita! – oDDsKooL

2

Questa è la mia realizzazione:

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

non diverso da quello precedente. funzione solo formattata e aspetto più pulito. Lo aggiungerò come commento ad esso. oh ... Non posso commentare. – OLS

-1

ho bisogno di tempo informazioni per tutto il tempo, quindi ho questo script .py pulito sul mio server che mi consente di selezionare e deselezionare solo i fusi orari formica da visualizzare in ordine est -> ovest.

esso stampa come questo:

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 

Ecco il codice sorgente è un file .py sul mio github qui: https://github.com/SpiRaiL/timezone o il collegamento diretto di file: https://raw.githubusercontent.com/SpiRaiL/timezone/master/timezone.py

nel file è un elenco così: Basta mettere una 'p' nei posti che vuoi stampare. Inserisci una "h" per il proprio fuso orario se lo si desidera contrassegnato in modo specifico.

(' ','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'),