now example create python timezone

example - string to datetime python



Obtener la zona horaria utilizada por datetime.datetime.fromtimestamp() (3)

De la documentación de Python :

classmethod datetime .fromtimestamp ( timestamp, tz=None )

Devuelve la fecha y hora locales correspondientes a la marca de tiempo POSIX, como la que devuelve time.time() . Si el argumento opcional tz es None o no está especificado, la marca de tiempo se convierte a la fecha y hora locales de la plataforma, y ​​el objeto de datetime y datetime devuelto es ingenuo.

Else tz debe ser una instancia de una subclase tzinfo clase, y la marca de tiempo se convierte a la zona horaria de tz . En este caso, el resultado es equivalente a tz.fromutc(datetime.utcfromtimestamp(timestamp).replace(tzinfo=tz)) .

La parte clave de esta descripción en relación con su pregunta es que cuando no especifica una zona horaria, no solo utiliza la zona horaria local, sino que el resultado es ingenuo . Parece que quieres que sea consciente .

Esta es una distinción particular hecha por Python, y se discute en la parte superior de la documentación de fecha y hora .

Si lo que desea es una datetime y datetime que conoce la zona horaria local, pruebe la biblioteca tzlocal . Se centra en ese problema particular. Véase también esta pregunta .

¿Es posible, y si es así, cómo, obtener la zona horaria (es decir, el desplazamiento UTC o una instancia de datetime.timezone con ese desplazamiento) que utiliza datetime.datetime.fromtimestamp() para convertir una marca de tiempo POSIX (segundos desde la ¿Época) a un objeto datetime ?

datetime.datetime.fromtimestamp() convierte una marca de hora POSIX en un objeto de datetime ingenuo (es decir, sin tzinfo ), pero lo hace usando la configuración regional del sistema para ajustarlo a la zona horaria local y al desplazamiento UTC que estaba vigente en ese momento.

Por ejemplo, utilizando la fecha 2008-12-27 medianoche UTC (40 * 356 * 86400 segundos desde la época):

>>> datetime.datetime.fromtimestamp(40 * 356 * 86400) datetime.datetime(2008, 12, 27, 1, 0)

Esa marca de tiempo se convierte en un objeto de datetime y datetime a la 1:00 de la mañana (que era en ese momento, aquí en una zona horaria CET / CEST). 100 días después, este es el resultado:

>>> datetime.datetime.fromtimestamp((40 * 356 + 100) * 86400) datetime.datetime(2009, 4, 6, 2, 0)

Que son las 2 de la mañana. Esto es porque para entonces, DST estaba activo.

Esperaba que datetime.datetime.fromtimestamp() configurara el tzinfo que usa en la instancia de datetime devuelta, pero no lo hace.


Usando time.gmtime puede extraer la zona horaria como se describe en esta respuesta anterior: ¿ Obtener información TZ del sistema en Python? .

>>> from __future__ import print_function >>> from time import gmtime, strftime >>> print(strftime("%z", gmtime())) -0600

Imprime -06: 00 para mi computadora portátil CST tanto en python-2.7 como en python-3.3 También puede usar localtime () para obtener una estructura de hora local.

>>> from __future__ import print_function >>> from time import localtime >>> lt = localtime() >>> print(lt.tm_zone) "CDT" >>> print(lt.tm_gmtoff/(60*60)) -5.0 >>> print(lt.tm_gmtoff/(60*60) - (1 if lt.tm_isdst == 1 else 0)) # Adjusted for DST -6.0

Espero que esto ayude


datetime.fromtimestamp(ts) convierte "segundos desde la época" en un objeto de fecha y hora ingenuo que representa la hora local. tzinfo siempre es None en este caso.

La zona horaria local puede haber tenido un desplazamiento UTC diferente en el pasado. En algunos sistemas que proporcionan acceso a una base de datos histórica de zona horaria, fromtimestamp() puede tenerlo en cuenta.

Para obtener el desplazamiento UTC utilizado por fromtimestamp() :

utc_offset = fromtimestamp(ts) - utcfromtimestamp(ts)

Consulte también, Obtención del desplazamiento de utc de la computadora en Python .