2011-09-07 8 views
8

Ho un timestamp con informazioni sul fuso orario in formato stringa e vorrei convertirlo per visualizzare la data/ora corretta utilizzando il fuso orario locale. Così, per esempio ... hoPython pytz Conversione di un timestamp (formato stringa) da un fuso orario a un altro

timestamp1 = 2011-08-24 13:39:00 +0800 

e vorrei convertire questo per dire compensare fuso orario 1000 per Dsiplay

timestamp2 = 2011-08-24 15:39:00 +1000 

Ho provato con pytz ma riusciva a trovare molti esempi che mostra come usa le informazioni di offset. Un altro link che ho trovato su StackOverflow che descrive questo problema esatto è here. Speravo che ci fosse un modo migliore di gestirlo usando pytz. Grazie per tutti i suggerimenti in anticipo :).

UPDATE

Grazie Cixate. Ho appena trovato la soluzione che è molto simile alla tua. Trovato questi link utili - LINK1 e LINK2

Distacco la soluzione per tutti quanti beneficiano

from datetime import datetime 
import sys, os 
import pytz 
from dateutil.parser import parse 

datestr = "2011-09-09 13:20:00 +0800" 
dt = parse(datestr) 
print dt 
localtime = dt.astimezone (pytz.timezone('Australia/Melbourne')) 
print localtime.strftime ("%Y-%m-%d %H:%M:%S") 
2011-09-09 15:20:00 
+0

consideri marcatura risposta di Cixate come corretta facendo clic sulla relativa casella di controllo, dal momento che la soluzione finale è vicino al suggerimento di Cixate. – wberry

risposta

9

datetime.astimezone farà la vostra conversione di base una volta che si dispone di un oggetto datetime. Se si sta cercando di ottenere un oggetto datetime da una stringa, Pip installarlo python-dateutil ed è semplice come:

>>> from dateutil.parser import parse 
>>> from dateutil.tz import tzoffset 
>>> dt = parse('2011-08-24 13:39:00 +0800') 
datetime.datetime(2011, 8, 24, 13, 39, tzinfo=tzoffset(None, 28800)) 
>>> dt.astimezone(tzoffset(None, 3600)) 
datetime.datetime(2011, 8, 24, 6, 39, tzinfo=tzoffset(None, 3600)) 
+0

Grazie Cixate..ho appena ottenuto la soluzione utilizzando dateutil.parser e datetime.astimezone. La mia soluzione è un po 'diversa dalla tua. Perdona la mia ignoranza, ma potresti per favore approfondire come recuperare le informazioni sul fuso orario usando "tzoffset (None, 3600)" – Angela

+0

Nel tuo esempio hai voluto tradurre in un offset di "+1000", sfortunatamente l'ho letto come "+0100 "ma il principale è lo stesso. Il primo parametro di tzoffset() è un nome, che può essere None se non ti interessa saperlo. Il secondo è l'offset da UTC in secondi. Quindi 3600 per 1 ora o 36000 per 10 ore. – six8

+0

Grazie Cixate per la spiegazione. – Angela

Problemi correlati