2015-01-22 8 views
5

hola data e l'ora Parse dalla stringa con il fuso orario utilizzando Freccia

import arrow 
s = '2015/12/1 19:00:00' 
tz = 'Asia/Hong_Kong' 

Come posso analizzare questo con la freccia in modo che ricevo un oggetto freccia con il fuso orario tz? Il seguente valore predefinito è ora UTC.

In [30]: arrow.get(s, 'YYYY/M/D HH:mm:ss') 
Out[30]: <Arrow [2015-12-01T19:00:00+00:00]> 

so la funzione .to ma che converte un fuso orario e, ma non mi permette di cambiare al fuso orario.

+1

Nel freccia doc vedo che il costruttore funziona come: "class arrow.arrow.Arrow (anno, mese, giorno, ora = 0, minuto = 0, secondo = 0, microsecondo = 0, tzinfo = Nessuno) ". È abbastanza per il tuo problema? In realtà restituisce un oggetto freccia con il tz desiderato. – Bestasttung

risposta

9

Prova questo:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=dateutil.tz.gettz(tz)) 
+0

Funziona! Solo per curiosità, è possibile fare lo stesso con pytz? Ottengo alcuni risultati strani: 'In [7]: arrow.get (s, 'YYYY/M/D HH: mm: ss'). Sostituisci (tzinfo = pytz.timezone (tz)) Out [7 ]: ' – mchangun

+1

Non sono sicuro, ma penso che la freccia sia meglio allineata con datautil di pytz. –

+0

@mchangun: il modo corretto di analizzare l'ora se non si desidera ignorare gli errori in modo silenzioso: 'pytz.timezone ('Asia/Hong_Kong'). Localize (datetime.strptime (s, '% Y /% m /% d% H:% M:% S '), is_dst = Nessuno) ' – jfs

6

Non ho ancora qualificato per aggiungere un commento e vorrei solo condividere la versione un po 'più semplice della risposta con l'espressione str fuso orario.

s = '2015/12/1 19:00:00' 
tz = 'Asia/Hong_Kong' 
arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo=tz) 

o semplicemente fuso orario locale:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='local') 

o specificato stile ISO-8601:

arrow.get(s, 'YYYY/M/D HH:mm:ss').replace(tzinfo='+08:00') 
+0

Questa dovrebbe essere la risposta accettata dall'OP. – hlin117

Problemi correlati