La mayoría de los elementos de fecha y hora que regresaron dateutil parser
son 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