Módulo datetime de Python: uso de timedelta, timezone y tzinfo
Es seguro decir que trabajar con fechas y horas es una tarea cotidiana para cualquier desarrollador. Esto es especialmente cierto cuando se trata de datos sensibles al tiempo, programación o registro.
Python, con su potente biblioteca estándar, proporciona un módulo simple pero potente llamado datetime
para manejar fechas y horas de manera eficiente.
Este artículo describe el módulo datetime
, sus principales clases y funciones, y las mejores prácticas para trabajar con fechas y horas en Python.
Si utiliza Python en VScode, consulte este post.
1. Entender el módulo datetime de Python
El módulo datetime
de la biblioteca estándar de Python contiene las siguientes funciones: datetime
,
date
, time
, timedelta
, tzinfo
, y otras clases para la manipulación de la fecha y la hora.
Empecemos con las clases y métodos más comunes.
1.1. datetime.datetime
Esta clase representa un único punto en el tiempo con información de fecha y hora. También proporciona varios métodos y atributos para acceder y manipular valores de fecha y hora.
Así que primero vamos a crear un objeto datetime
.
from datetime import datetime
# fecha y hora actuales
now = datetime.now()
print(now)
# una fecha y hora concretas
dt = datetime(2022, 9, 15, 10, 30)
print(dt)
Con este objeto se puede acceder a los siguientes atributos
from datetime import datetime
now = datetime.now()
print(f"Year: {now.year}")
print(f"Month: {now.month}")
print(f"Day: {now.day}")
print(f"Hour: {now.hour}")
print(f"Minute: {now.minute}")
print(f"seconds: {now.second}")
print(f"Milliseconds: {now.microseconds}")
1.2 datetime.date
Esta clase representa una fecha (año, mes, día) y proporciona métodos para trabajar con fechas sin información horaria.
Primero, crearemos un objeto date
para obtener la información que queremos.
from datetime import date
# fecha actual
today = date.today()
print(today)
# una fecha concreta
d = date(2022, 9, 15)
print(d)
1.3. datetime.time
Esta clase representa el tiempo (horas, minutos, segundos, milisegundos) y proporciona métodos para trabajar sólo con valores de tiempo, sin información de fecha.
Crea un objeto time
para obtener la información horaria.
from datetime import time
# hora específica
t = time(10, 30, 15)
print(t)
1.4. datetime.timedelta
Esta es una clase muy útil que representa un período de tiempo y se puede utilizar para realizar cálculos con objetos datetime{:python
, como sumar o restar días, horas o minutos.
Un objeto timedelta{:python
puede crearse como sigue..:
from datetime import timedelta
# Declara una duración de 5 días, 3 horas y 30 minutos en una variable
delta = timedelta(days=5, hours=3, minutes=30)
print(delta)
Calculemos un periodo de tiempo concreto con los objetos datetime{:python
y timedelta{:python
.
from datetime import datetime, timedelta
now = datetime.now()
# Calcular después de 5 días
future = now + timedelta(days=5)
print(future)
# Calcula 3 horas hace
past = now - timedelta(hours=3)
print(past)
2. Trabajar con zonas horarias y hora UTC (UTC TIme)
El módulo datetime
proporciona la clase timezone
, una subclase de tzinfo
, para trabajar con husos horarios y desfases UTC (Tiempo Universal Coordinado).
También proporciona la clase timezone
, que es una subclase de tzinfo
.
Para crear un objeto datetime
que tenga en cuenta la zona horaria, puedes utilizar la clase timezone
y el método astimezone()
.
Véase el ejemplo.
from datetime import datetime, timezone
# hora UTC actual
utc_now = datetime.now(timezone.utc)
print(utc_now)
# convertir a otra zona horaria
from pytz import timezone
tz = timezone("Asia/Seoul")
local_now = utc_now.astimezone(tz)
print(local_now)
En el ejemplo anterior, hemos utilizado la biblioteca pytz
, un paquete externo, para manejar la zona horaria dada.
La librería pytz
es ampliamente utilizada para manejar conversiones de zonas horarias en Python, ya que proporciona una extensa y actualizada base de datos de zonas horarias.
3. Formateo y análisis de fecha y hora
El módulo datetime
proporciona dos métodos útiles para formatear y analizar fechas y horas como cadenas.
datetime.strptime(cadena_fecha, formato)
: Este método toma dos argumentos, date_string, una cadena que representa la fecha y la hora, y format, una cadena de formato que especifica la estructura de la fecha y la hora en la cadena de entrada, para extraer la información horaria de una cadena.datetime.strftime(formato)
: Este método toma un argumento, format, una cadena de formato que especifica la estructura deseada de la cadena de salida. Este método se invoca sobre un objeto datetime y devuelve una representación en forma de cadena de la fecha/hora según el formato especificado.
from datetime import datetime
# Lee la información horaria de una cadena con el método strptime()
date_string = "15-04-2023 16:30:00"
format_string = "%d-%m-%Y %H:%M:%S"
date_obj = datetime.strptime(date_string, format_string)
print(date_obj) # Output: 2023-04-15 16:30:00
# Convierte la información horaria en una cadena con el método strftime()
new_format_string = "%A, %B %d, %Y at %I:%M %p"
formatted_date = date_obj.strftime(new_format_string)
print(formatted_date) # Output: Saturday, April 15, 2023 at 04:30 PM
4. Buenas prácticas para trabajar con fechas y horas en Python
Hasta ahora, hemos cubierto lo básico para trabajar con fechas y horas con el módulo datetime
de Python.
Aquí hay algunas buenas prácticas a tener en cuenta cuando se utiliza este módulo.
- Conocimiento de la zona horaria: El conocimiento de la zona horaria es una cuestión importante cuando se utiliza el objeto
datetime
. Cuando trabajes con fechas y horas en diferentes zonas horarias, utiliza siempre el objetodatetime
para evitar problemas como el horario de verano o las diferencias horarias locales. - Recomendamos utilizar la biblioteca
pytz
para la conversión de zonas horarias. La bibliotecapytz
ofrece una amplia y actualizada base de datos de husos horarios. Se utiliza ampliamente para manejar las conversiones de zonas horarias en Python. - Para convertir un objeto datetime en una cadena o para analizar la información de una cadena, utilice los métodos
strftime()
ystrptime( )
. Estos métodos proporcionan una forma consistente y flexible de manejar cadenas de fecha y hora en Python.
5. Conclusión
En este artículo, hemos cubierto los fundamentos del módulo datetime
de Python, incluyendo las principales clases y funciones para trabajar con fechas y horas.
También hemos discutido las mejores prácticas para el manejo de zonas horarias, el formato de cadenas, y el análisis sintáctico de fechas y horas.
Ahora, para más detalles, recomiendo leer la documentación oficial de Python para datetime (opens in a new tab). Cuando tiene sentido, la documentación oficial es siempre la mejor guía.
Para soluciones a casos específicos, vea el calculate, compare date/time, convert date/time, print date/time post.
Trabajar con fechas y horas es algo que encontrarás a menudo, así que tómate tu tiempo para entenderlo. Una vez que le cojas el truco, estarás bien equipado para realizar una gran variedad de tareas de manipulación de fechas y horas en el futuro.
