2012-12-11 9 views
5

esempio:Converti oggetto datetime in un particolare fuso orario in epoca secondi in quel fuso orario

>>> print dt
2012-12-04 19:00:00-05:00

Come potete vedere, ho questo oggetto datetime Come posso convertire questo oggetto datetime di un'epoca secondi in GMT -5.

Come posso fare?

+4

Epoca secondi non esistono per fuso orario. Per definizione sono UTC e sono gli stessi in tutto il mondo. Ogni fuso orario converte al volo per ora locale. –

+0

@jimmcnamara Questa è la chiave. Estremamente utile, signore. –

risposta

6

Il datetime non è un datetime ingenuo, conosce il fuso orario in cui si trova (la stampa indica che è -5). Quindi non vi resta che impostarlo come UTC prima di convertirlo in epoca

>>> import time, pytz 
>>> utc = pytz.timezone('UTC') 
>>> utc_dt = utc.normalize(dt.astimezone(utc)) 
>>> time.mktime(utc_dt.timetuple()) 
1355270789.0 # This is just to show the format it outputs 

Se l'oggetto dt era un oggetto datetime ingenuo, avresti bisogno di lavorare con i fusi orari per conformarsi a ora legale mentre trovare la ore corrette tra GMT 0. Ad esempio, Romania in inverno, ha +2 e in estate +3.

Per la vostra -5 esempio, New-York farà:

>>> import time,pytz 
>>> timezone = pytz.timezone('America/New_York') 
>>> local_dt = timezone.localize(dt) 

Ora avete un datetime non ingenuo e si può ottenere il tempo dell'epoca, come ho spiegato prima. Buon divertimento

+1

Presumibilmente "-05: 00" codifica già l'offset corretto per la data e il fuso orario specificati, quindi perché passare al problema di lavorare all'indietro? –

+0

Grazie, ho perso il -5 nella stampa. Ho adattato la risposta per spiegare come convertire anche da datetime non ingenuo. – mihaicc

+0

Questa soluzione ha funzionato meglio per me. http://stackoverflow.com/a/11111177/969984 –