Analizar fecha ISO 8601 en Python

Olorunfemi Akinlua 21 junio 2023
  1. Estructura de la ISO 8601 Fecha
  2. Utilice strptime() y strtime() para analizar la fecha ISO 8601 en Python
  3. Utilice fromisoformat() para analizar la fecha ISO 8601 en Python
  4. Use dateutil para analizar la fecha ISO 8601 en Python
Analizar fecha ISO 8601 en Python

Las fechas son importantes para todos y cruciales para muchas aplicaciones que usamos. Como desarrollador, puede ser un poco confuso con las diferentes zonas horarias u objetos de tiempo que existen y trabajar alrededor de ellos.

Sin embargo, a menudo existen estándares que facilitan el trabajo, y eso es lo que implica este artículo. Además, discutiremos la estructura de una fecha ISO 8601 típica y le mostraremos cómo analizar los objetos DateTime típicos en el DateTime estandarizado que se puede usar en todas partes.

Estructura de la ISO 8601 Fecha

La ISO (Organización Internacional para la Estandarización) trabaja en la creación de estandarización para sus países miembros en diferentes campos, que a menudo abarcan áreas técnicas y no técnicas. Áreas como la ingeniería son parte de sus prioridades.

Las numerosas estandarizaciones incluyen el ISO 8601 DateTime, representado por el mes, día, hora, minutos, segundos y milisegundos. Se utiliza como el estándar de fecha y hora en todo el mundo para cualquier dato y se basa en el tiempo, lo que ayuda a evitar tergiversaciones y errores.

Si va a crear una aplicación de Python que se utilice en todo el mundo, es importante comprender el objeto DateTime ISO 8601 y analizarlo puede ser un requisito.

La fecha y hora ISO 8601 se representa con el año que comienza a la izquierda y termina con un parámetro de milisegundos y, a menudo, se combina con otros caracteres informáticos de la T a la Z.

2022-08-10 17:00:00.000

El objeto ISO DateTime anterior representa el día 11 de agosto del año 2022 a las 5 p.m. dentro de la zona horaria local.

Es importante indicar que la cadena ISO 8601 DateTime requiere la sección de fecha, pero la sección de hora es opcional. Son distintas variantes de la ISO 8601, pero la anterior sería la referencia de este artículo.

Utilice strptime() y strtime() para analizar la fecha ISO 8601 en Python

Python viene preinstalado con diferentes módulos que son útiles para diferentes operaciones, y uno de esos módulos preinstalados es datetime, que ayuda con las operaciones de fecha y hora. Con el módulo datetime, puede obtener valores datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]]).

El método now() nos ayuda a obtener y desarrollar la fecha y la hora actuales y proporciona el típico objeto DateTime que podemos manipular o analizar para obtener cualquier información que necesitemos.

from datetime import datetime

todaysDate = datetime.now()

print(todaysDate)

Producción :

2022-09-28 06:55:56.832983

Además, el método today() se puede utilizar para lograr el mismo valor. Aunque, se prefiere el método ahora() al método hoy().

AnoTodaysDate = datetime.today()

Producción :

2022-09-29 10:48:43.311880

Antes, analizamos el típico objeto DateTime de Python en el DateTime ISO 6801 estandarizado. Revirtamos esto creando el ISO 6801 DateTime con el objeto Python DateTime.

Para lograr esto, necesitamos el método strftime(), que nos ayuda a convertir los objetos DateTime a su representación de cadena, esta vez, la cadena ISO 6801 DateTime.

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.strftime("%Y-%m-%dT%H:%M:%S.%f%z")

print(todaysDateInISO)

Producción :

2022-09-29T11:08:29.413183

El enlace todaysDate contiene el objeto Python DateTime para la fecha y la hora actuales, y luego pasamos el enlace como argumento al método strftime() para crear el equivalente de cadena ISO 8601 DateTime.

Con estos ahora, ¿cómo convertimos la cadena ISO 8601 DateTime en un objeto Python DateTime? Necesitamos un método que haga lo contrario del método strftime(), el strptime().

Este método crea un objeto DateTime a partir de una cadena DateTime.

Por lo tanto, pasaremos una cadena ISO 6801 DateTime como primer argumento de strptime() y otro argumento que define el formato de fecha que desea: el objeto Python DateTime %Y-%m-%dT%H:%M:%SZ.

parsedDate = datetime.strptime("2022-03-04T21:08:12Z", "%Y-%m-%dT%H:%M:%SZ")
print(parsedDate)

Producción :

2022-03-04 21:08:12

El formato de fecha Y-%m-%dT%H:%M:%SZ procesa el año, mes, día, hora, minuto y segundo usando los códigos de formato especificados dentro del objeto Python DateTime.

Utilice fromisoformat() para analizar la fecha ISO 8601 en Python

Al igual que los métodos strftime() y strptime(), existen métodos dedicados que pueden crear cadenas ISO 6801 DateTime o convertirlas en objetos Python DateTime. El método isoformat() ayuda a devolver la hora formateada según ISO, que se procesa en el formato YYYY-MM-DD HH:MM:SS.mmmmmm.

Y lo que es más importante, el método fromisoformat() toma la cadena ISO 8601 DateTime y devuelve el equivalente del objeto Python DateTime.

Para crear un ISO 8601 a partir de un objeto Python DateTime, primero puede crear el objeto DateTime usando el método now() y obtener la propiedad ISO 8601 (formato) del resultado usando isoformat().

from datetime import datetime

todaysDate = datetime.now()
todaysDateInISO = todaysDate.isoformat()

print(todaysDateInISO)

Producción :

2022-09-28T07:46:13.350585

El resultado suele contener un separador entre la fecha y la hora. Aquí, es T y se puede cambiar. Puede cambiar el separador pasando un argumento.

todaysDateInISO = todaysDate.isoformat("$")

print(todaysDateInISO)

Producción :

2022-09-28$07:48:11.060212

Ahora, al quid de la cuestión, podemos analizar la cadena ISO 8601 DateTime en un objeto Python DateTime típico.

parsedDate = datetime.fromisoformat(todaysDateInISO)
print(parsedDate)

Producción :

2022-09-29 14:38:17.928655

Use dateutil para analizar la fecha ISO 8601 en Python

El módulo Python dateutil es un módulo de terceros que puede utilizar para ampliar las funcionalidades accesibles a través del módulo datetime integrado.

Para instalarlo, puede utilizar el comando pip:

pip install python-dateutil

Producción :

Collecting python-dateutil
  Downloading python_dateutil-2.8.2-py2.py3-none-any.whl (247 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 247.7/247.7 kB 506.3 kB/s eta 0:00:00
Collecting six>=1.5
  Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: six, python-dateutil
Successfully installed python-dateutil-2.8.2 six-1.16.0

Además, también puede introducir funcionalidades de zona horaria usando otro módulo de terceros llamado pytz, que se puede instalar usando el comando pip.

pip install pytz

Estas bibliotecas pueden crear fácilmente un formato de fecha ISO 8601 basado en una zona horaria y analizar la cadena ISO 8601 DateTime en el típico objeto Python DateTime.

Para el ejemplo, utilizaremos la zona horaria US/Eastern y crearemos una cadena ISO 8601 DateTime utilizando el método timezone(), el método now() y el método isoformat().

from datetime import datetime
import pytz

usEasternDate = datetime.now(pytz.timezone("US/Eastern"))
print(usEasternDate)

usEasternDateISO = usEasternDate.isoformat()
print(usEasternDateISO)

Producción :

2022-09-29 10:01:17.654150-04:00
2022-09-29T10:01:17.654150-04:00

Luego, para analizar la cadena ISO 8601 DateTime en el objeto Python DateTime, podemos usar el método parse() con la fecha ISO pasada como argumento.

parsedDate = parser.parse(usEasternDateISO)
print(parsedDate)

Producción :

2022-09-29 10:01:17.654150-04:00
Olorunfemi Akinlua avatar Olorunfemi Akinlua avatar

Olorunfemi is a lover of technology and computers. In addition, I write technology and coding content for developers and hobbyists. When not working, I learn to design, among other things.

LinkedIn