Localización del tiempo de época con pytz en Python

Estoy trabajando para convertir las marcas de tiempo de época en fechas en diferentes zonas horarias con pytz. Lo que estoy tratando de hacer es crear un objeto DateTime que acepte una zona horaria de la base de datos Olson y una hora de época y devuelva un objeto de fecha y hora localizado. Eventualmente necesito responder preguntas como “¿Qué hora fue en Nueva York en la época 1350663248?”

Algo no está funcionando correctamente aquí:

import datetime, pytz, time class DateTime: def __init__(self, timezone, epoch): self.timezone = timezone self.epoch = epoch timezoneobject = pytz.timezone(timezone) datetimeobject = datetime.datetime.fromtimestamp( self.epoch ) self.datetime = timezoneobject.localize(datetimeobject) def hour(self): return self.datetime.hour if __name__=='__main__': epoch = time.time() dt = DateTime('America/Los_Angeles',epoch) print dt.datetime.hour dt = DateTime('America/New_York',epoch) print dt.datetime.hour 

Esto imprime la misma hora, mientras que uno debe estar 3 o más horas por delante. ¿Qué está mal aquí? Soy un principiante total de Python, cualquier ayuda es apreciada!

datetime.fromtimestamp(self.epoch) devuelve la datetime.fromtimestamp(self.epoch) que no debe usarse con una zona horaria arbitraria.localize (); necesita utcfromtimestamp() para obtener datetime en UTC y luego convertirlo a una zona horaria deseada:

 from datetime import datetime import pytz # get time in UTC utc_dt = datetime.utcfromtimestamp(posix_timestamp).replace(tzinfo=pytz.utc) # convert it to tz tz = pytz.timezone('America/New_York') dt = utc_dt.astimezone(tz) # print it print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')) 

O una alternativa más simple es construir directamente desde la marca de tiempo:

 from datetime import datetime import pytz # get time in tz tz = pytz.timezone('America/New_York') dt = datetime.fromtimestamp(posix_timestamp, tz) # print it print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z')) 

Convierte desde UTC implícitamente en este caso.

Para crear el objeto de datetime que pertenece a una zona horaria particular a partir de una marca de tiempo de Unix, puede pasar el objeto pytz como un parámetro tz al crear su datetime y datetime . Por ejemplo:

 >>> from datetime import datetime >>> import pytz >>> datetime.fromtimestamp(1350663248, tz= pytz.timezone('America/New_York')) datetime.datetime(2012, 10, 19, 12, 14, 8, tzinfo=) 

Puede obtener la lista de todas las zonas horarias utilizando pytz.all_timezones que devuelve una lista exhaustiva de los nombres de zonas horarias que se pueden utilizar .

También eche un vistazo a la lista de la base de datos tz wiki de zonas horarias .

 epochdt = datetime.datetime.fromtimestamp(epoch) timezone1 = timezone("Timezone/String") adjusted_datetime = timezone1.localize(epochdt) 

Trabajar desde la memoria, así que disculpe cualquier error de syntax, pero eso debería ponerlo en el camino correcto.

EDITAR: Se perdió la parte sobre saber la hora, etc. Python tiene un gran formato de fecha / hora . Casi en la parte inferior de ese enlace está la tabla que muestra cómo extraer diferentes atributos del objeto datetime.