Ho un database che memorizza datetime come UTC. Devo cercare informazioni da un momento particolare, ma la data e l'ora sono date in un'ora locale, diciamo "Europa/Copenhagen". Mi sono dato come questi:Python pytz: converti ora locale in utc. La localizzazione non sembra convertire
year = 2012; month = 12; day = 2; hour = 13; min = 1;
Così, ho bisogno di convertire queste a UTC modo che io possa cercare nel database. Voglio farlo usando pytz
. Io sto guardando localize
:
local_tz = timezone('Europe/Copenhagen')
t = local_tz.localize(datetime.datetime(year, month, day, hour, min))
Ma io sono confuso su localize()
. Questo presupponendo che quell'anno, ecc., Mi venga dato in ora locale? Oppure, supponendo che siano dati in UTC e ora li ha convertiti all'ora locale?
print t
mi da:
2012-12-02 13:01:00+01:00
Così sembra che si presume che l'anno originale, ecc era in UTC; ora è ora 13 + 1 invece di 13. Quindi cosa dovrei fare invece? Ho letto la documentazione di pytz e questo non mi rende più chiaro. Ricorda molto che le cose sono complicate quindi non sono sicuro che pytz stia effettivamente risolvendo questi problemi. E, non sempre so se gli esempi mi mostrano cose che funzionano o cose che non funzionano.
ho cercato normalizzare:
print local_tz.normalize(t)
che mi dà lo stesso risultato della stampa t.
MODIFICA: con i numeri sopra indicati per anno ecc. Dovrebbe corrispondere con le informazioni nel database 2012-12-2 12:01. (Dopo Copenaghen è UTC + 1 in quella data)
Che dà l'ora come 14: 01: 00 + 01: 00. L'ora locale corretta è 13 e l'ora utc è 12. – user984003
@ user984003: Ah, scusa, ho letto male la prima frase. '.astimezone()' è ancora la strada da percorrere, solo il contrario. –
Sì, quella seconda strada funziona, grazie. Potresti averlo nella tua risposta, altrimenti penso che sia un po 'confuso;) Vedo che ero confuso riguardo alla data stampata. "+01: 00" mi dice che è un'ora avanti a utc, non che dovrei aggiungere un'ora al tempo. – user984003