2014-05-23 18 views
5

Sto lavorando con un set di dati con data e ora provenienti da due diversi fusi orari. Di seguito è quello che sto cercando di fare:Calcola il tempo in un fuso orario diverso in Python

1. Creare un oggetto tempo t1 da una stringa;

2. Impostare il fuso orario per t1;

3.Inferire l'ora t2 in un fuso orario diverso.

import time 
s = "2014-05-22 17:16:15" 
t1 = time.strptime(s, "%Y-%m-%d %H:%M:%S") 
#Set timezone for t1 as US/Pacific 
#Based on t1, calculate the time t2 in a different time zone 
#(e.g, Central European Time(CET)) 

Qualsiasi risposta/commento sarà apprezzata ..!

risposta

3

Usa datetime e pytz

import datetime 
import pytz 
pac=pytz.timezone('US/Pacific') 
cet=pytz.timezone('CET') 
s = "2014-05-22 17:16:15" 
t1 = datetime.datetime.strptime(s, "%Y-%m-%d %H:%M:%S") 
pacific = pac.localize(t1) 
cet_eur = pacific.astimezone(cet) 
print pacific 
print cet_eur 

2014-05-22 17:16:15-07:00 
2014-05-23 02:16:15+02:00 

Penso che si desidera datetime.timetuple

Return un time.struct_time come quella restituita dalla time.localtime(). Le ore, i minuti e i secondi sono 0 e il flag dell'ora legale è -1. d.timetuple() è equivalente a time.struct_time ((d.anno, giorno.mese, giorno, 0, 0, 0, d.weekday(), giorno, -1)), dove yday = d.ordinario() - date (d.anno, 1, 1) .ordinario() + 1 è il numero del giorno nell'anno corrente che inizia con 1 per il 1 ° gennaio.

print datetime.date.timetuple(t1) 
    time.struct_time(tm_year=2014, tm_mon=5, tm_mday=22, tm_hour=17, tm_min=16, tm_sec=15, tm_wday=3, tm_yday=142, tm_isdst=-1) 

Questo un breve progetto, ma la documentazione pytz hanno un sacco di buona ed esempi chiari

+0

Grazie, Padraic! Funziona perfettamente. C'è un modo rapido per convertire l'oggetto datetime.datetime in un oggetto time.struct_time? Ho visto molti esempi per fare un altro modo. – jinlong

+0

@jinnon ci sono preoccupazioni, ho modificato la mia risposta. –

+0

Ciao Padraic, grazie ancora! Il datetime.date.timetuple() funziona, tranne che scarta le informazioni temporali (cioè H: M: S) quindi suggerisco di cambiare la risposta a datetime.datetime.timetuple(). – jinlong

Problemi correlati