Python | Conversión de zona horaria

La mayoría de los elementos de fecha y hora que regresaron dateutil parserson ingenuos, lo que significa que no tienen un tzinfo explícito . tzinfo determina la zona horaria y el desplazamiento UTC. Es el formato ISO estándar para strings de fecha y hora UTC. UTC es el tiempo universal coordinado , y es fundamentalmente el equivalente a GMT. ISO es la Organización Internacional de Normalización , que además de otras cosas, determina el diseño estándar de fecha y hora.

Los elementos de fecha y hora de Python pueden ser ingenuos o conscientes. Si un elemento de fecha y hora tiene un tzinfo, en ese momento lo sabe. Otra cosa, la fecha y hora es ingenua. Para que un objeto ingenuo de fecha y hora reconozca la zona horaria, defina la clase base abstracta tzinfo. En cualquier caso, la biblioteca de fecha y hora de Python solo caracteriza una clase base conceptual para tzinfo y deja que otros actualicen realmente la creación de tzinfo. Aquí es donde entra en juego el módulo tz de dateutil: proporciona todo lo que se necesita para cambiar las zonas horarias hacia arriba desde la información de la zona horaria de su sistema operativo.

Instalación:

Use pip o easy_install dateutil para instalar. Asegúrese de que el sistema operativo tenga datos de zona horaria.

En Linux, esto generalmente se encuentra en /usr/share/zoneinfo, y el paquete de Ubuntu se llama tzdata. En el caso de la cantidad de archivos y directorios en /usr/share/zoneinfo, como America/ y Europe/, entonces está listo para continuar.

Obtener un objeto UTC tzinfo – llamandotz.tzutc()

from dateutil import tz
tz.tzutc()
tzutc()

El desplazamiento es 0 llamando al utcoffset()método con un objeto de fecha y hora UTC.

import datetime
tz.tzutc().utcoffset(datetime.datetime.utcnow())
datetime.timedelta(0)

Pase una ruta de archivo de zona horaria a la gettz()función para obtener objetos tzinfo para otras zonas horarias.

tz.gettz('US/Pacific')
tzfile('/usr/share/zoneinfo/US/Pacific')
tz.gettz('Europe / Paris')
tzfile('/usr/share/zoneinfo/Europe/Paris')
tz.gettz('US / Pacific').utcoffset(datetime.datetime.utcnow())
datetime.timedelta(-1, 61200)

Para cambiar un elemento de fecha y hora no UTC a UTC, debe tener en cuenta la zona horaria. En caso de que intente cambiar una fecha y hora crédula a UTC, obtendrá una exención de ValueError. Para hacer que una zona horaria de fecha y hora ingenua sea consciente, básicamente llama a la replace()estrategia con el tzinfo correcto. Una vez que un elemento de fecha y hora tiene un tzinfo, en ese punto se puede realizar un cambio de UTC llamando a la astimezone()técnica con tz.tzutc().

abc = tz.gettz('US/Pacific')
dat = datetime.datetime(2010, 9, 25, 10, 36)
dat.tzinfo
dat.astimezone(tz.tzutc())
Traceback (most recent call last):
 File "/usr/lib/python2.6/doctest.py", line 1228, in __run
 compileflags, 1) in test.globs
 File "", line 1, in 
 dat.astimezone(tz.tzutc())
ValueError: astimezone() cannot be applied to a naive datetime
dat.replace(tzinfo = abc)
datetime.datetime(2010, 9, 25, 10, 36, tzinfo=tzfile(
'/usr/share/zoneinfo/US/Pacific'))

Todos detrás trabajando –

  • Los elementos tzutc y tzfile son las dos subclases de tzinfo.
  • A fin de cuentas, conocen el desplazamiento UTC correcto para el cambio de zona horaria (que es 0 para tzutc).
  • Un elemento de tzfile se da cuenta de cómo leer detenidamente los documentos zoneinfo del marco de trabajo para obtener la información básica de contrapeso.
  • La estrategia replace() para un elemento de fecha y hora hace lo que sugiere el nombre: reemplaza cualidades.
  • Una vez que una fecha y hora tiene un tzinfo, la estrategia astimezone() probablemente creerá la hora usando los contrapesos UTC, y luego reemplazará el tzinfo actual con el nuevo tzinfo.

Código: pasar un argumento de palabra clave tzinfos al analizador dateutil para detectar las zonas horarias no reconocidas

parser.parse('Wednesday, Aug 4, 2010 at 6:30 p.m. (CDT)',
             fuzzy = True)
datetime.datetime(2010, 8, 4, 18, 30)
tzinfos = {'CDT': tz.gettz('US/Central')}
parser.parse('Wednesday, Aug 4, 2010 at 6:30 p.m. (CDT)',
fuzzy = True, tzinfos = tzinfos)
datetime.datetime(2010, 8, 4, 18, 30, tzinfo=tzfile('
/usr/share/zoneinfo/US/Central'))

Publicación traducida automáticamente

Artículo escrito por mathemagic y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *