La conversión de python datetime a la hora y de vuelta en UTC todavía utiliza la zona horaria local

Estoy trabajando con un código que me da las marcas de hora utc y la quiero convertir a la adecuada datetimes. Lamentablemente, cuando me prueba simple de los casos con pytz la datetime ha añadido 6 horas (CST desplazamiento de UTC). Tengo que mantener la zona horaria de datos correctos, porque yo soy el cálculo de la diferencia entre las otras zonas horarias así. Alguna idea de por qué y cómo convertir una marca de hora utc a un utc datetime?

In [1]: import pytz

In [2]: from datetime import datetime

In [3]: import time

In [4]: datetime.fromtimestamp(time.mktime(datetime(7,1,1, tzinfo=pytz.UTC).timetuple()), tz=pytz.UTC)
Out[4]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [5]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()), tz=pytz.UTC)
Out[5]: datetime.datetime(2007, 1, 1, 6, 0, tzinfo=<UTC>)

In [6]: datetime.fromtimestamp(time.mktime(datetime(7,1,1).utctimetuple()))
Out[6]: datetime.datetime(2007, 1, 1, 0, 0)
InformationsquelleAutor aterrel | 2011-05-10

3 Kommentare

  1. 86

    Para obtener ingenua de un objeto datetime que representa la hora en UTC de «segundos desde la época» timestamp:

    from datetime import datetime
    
    utc_dt = datetime.utcfromtimestamp(ts)

    Si quieres obtener una cuenta objeto datetime para la zona horaria UTC:

    import pytz
    
    aware_utc_dt = utc_dt.replace(tzinfo=pytz.utc)

    Para convertir a algunos otros de la zona horaria:

    tz = pytz.timezone('America/Montreal')
    dt = aware_utc_dt.astimezone(tz)

    Para convertir la fecha a un consciente objeto datetime en la zona horaria directamente:

    dt = datetime.fromtimestamp(ts, tz)
    • ¿cuál es la variable ts?
    • el método tiene las palabras: «de la marca de tiempo» en su nombre. Se sugiere que el argumento es una marca de tiempo. El texto de la descripción antes de las sugerencias para el código en eso también. La escritura como » utc_dt = datetime.utcfromtimestamp(timestamp) » yo pensaba que iba a ser demasiado, por lo que he abreviado timestamp a ts.
  2. 1

    Haría usted sucede estar en el US CST zona horaria o equivalente?

    Se ve como muestra de lo que fue en UTC cuando tu hora local era una medianoche de 1/1/2007.

    • Sí, yo soy en NOSOTROS CST. Supongo que me gustaría saber cuál es la forma correcta de llamar a este para obtener un utc fecha, pensé tzinfo establecer la zona horaria correctamente.
    • Esto es de pytz documentación: >>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.la hora utc).strftime(fmt) ‘2002-10-27 12:00:00 UTC+0000’
    • Olaf gracias fro su repsonse pero este no es exactamente el problema. El strftime funciona bien en el objeto datetime. Lo que no funciona es el de convertir a una marca de tiempo a continuación, obtener la misma hora utc de la marca de hora.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea