2011-01-24 9 views
13
import time 
print time.strftime("%a, %d %b %Y %I:%M %p %Z", time.gmtime()) 

Vivo in California. Per qualche motivo, questo codice riporta l'ora in GMT, invece di rispettare il fuso orario del sistema. So che strftime sa che sono in pacifico, perché alla fine stampa ancora "PST", ma è ancora otto ore avanti. Qualcun altro se ne accorge? Qualcuno sa cosa c'è di sbagliato nel mio sistema o nel mio codice?Python: strftime, gmtime non rispettando il fuso orario

EDIT: esecuzione date dalla riga di comando mi dà la data corretta. Inoltre, l'ho eseguito su due computer diversi (mac e linux) e entrambi riportano 8 ore prima. Ti aspetti di correggere il fuso orario prima di usare strftime?

+0

Cosa succede se si esegue "data" sulla riga di comando? Potrebbe essere che l'ora del tuo computer è impostata su GMT, ma ha un fuso orario della California? –

risposta

25

time.gmtime() restituisce l'ora in UTC. Quello che ti serve è time.localtime(), che è con timezone-aware. Questo comportamento è ben documentato nello time module documentation.

EDIT:

per convertire qualsiasi timestamp time.time() stile a un struct_time, è possibile fornire un argomento per time.localtime():

>>> print time.strftime("%a, %d %b %Y %I:%M:%S %p %Z", time.localtime(10.5)) 
Thu, 01 Jan 1970 02:00:10 AM EET 
+0

time.localtime() è ottimo, ma sto ricevendo il mio timestamp da un file in UTC. Come posso convertire un fuso orario da UTC al fuso orario locale? –

+0

time.localtime() funziona alla grande. Grazie! –

+1

@Shaun: è possibile trovare [pytz] (http://pytz.sourceforge.net/) utile per conversioni di fuso orario più coinvolte. 'time.localtime' ha alcuni problemi quando si lavora con timestamp non in questo momento (ad esempio nel passato o nel futuro oltre un cambio dell'ora legale, ecc.). – ephemient

0

Per cambiare il fuso orario sul sistema UNIX, fare qualcosa del genere:

ln -sf /usr/share/zoneinfo/America/Los_Angeles /etc/localtime 

Sfogliare in /usr/share/zoneinfo/ per trovare ciò che volere e modificare il comando sopra

+0

Perché il down voto senza commento? – Landon