2011-09-07 18 views
8

Tengo una marca de tiempo con información de zona horaria en formato de cadena y me gustaría convertir esto para mostrar la fecha/hora correcta usando mi zona horaria local. Así, por ejemplo ... TengoPython pytz Convertir una marca de tiempo (formato de cadena) de una zona horaria a otra

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

y me gustaría convertir esto a decir compensado zona horaria 1000 a Dsiplay

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

He intentado usar pytz pero no podía encontrar muchos ejemplos que muestran cómo usa la información de compensación. Otro enlace que encontré en stackoverflow que describe este problema exacto es here. Esperaba que hubiera una forma mejor de manejar esto usando pytz. Gracias por todas las sugerencias de antemano :).

ACTUALIZACIÓN

Gracias Cixate. Acabo de encontrar la solución que es muy similar a la tuya. Encontrado estos enlaces útiles - LINK1 y LINK2

Publicación de la solución para gustos se benefician

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

Considérese que marca la respuesta de Cixate como correcta haciendo clic en la casilla de verificación, ya que su solución final está cerca de la sugerencia de Cixate. – wberry

Respuesta

9

datetime.astimezone va a hacer su conversión básico una vez que tenga un objeto de fecha y hora. Si usted está tratando de obtener un objeto de fecha y hora de una cadena, Pip instalar python-dateutil y es tan simple como:

>>> 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

Gracias Cixate ... Acabo de obtener la solución usando dateutil.parser y datetime.astimezone. Mi solución es un poco diferente a la tuya. Perdona mi ignorancia, pero ¿podrías explicar cómo recuperar la información de la zona horaria usando "tzoffset (None, 3600)" – Angela

+0

En tu ejemplo querías traducir a un desplazamiento de "+1000", desafortunadamente lo leí como "+0100 "pero el director es el mismo. El primer parámetro de tzoffset() es un nombre, que puede ser None si no le interesa saberlo. El segundo es el desplazamiento de UTC en segundos. Entonces 3600 por 1 hora o 36000 por 10 horas. – six8

+0

Gracias Cixate por la explicación. – Angela

Cuestiones relacionadas