El Módulo datetime, Funciones para Manejo de la Hora y la Fecha en Python
El módulo datetime
de Python es una herramienta poderosa y versátil que permite a los desarrolladores trabajar con fechas y horas de manera eficiente. Este documento explora las principales funcionalidades del módulo, incluyendo la creación de objetos de fecha y hora, la manipulación de estos objetos y la realización de operaciones comunes como la comparación y el formateo. A través de ejemplos prácticos, se ilustrará cómo utilizar este módulo para resolver problemas cotidianos relacionados con el tiempo.

datetime
, Funciones para Manejo de la Hora y la Fecha en Python. Introducción al Módulo datetime
El módulo datetime
en Python proporciona clases para manipular fechas y horas. Este módulo es muy útil para trabajar con fechas y horas de manera eficiente y precisa. A continuación, se describen las principales categorías y comandos del módulo datetime
:
-
datetime
: Combina fecha y hora. -
date
: Representa solo la fecha (año, mes, día). -
time
: Representa solo la hora (hora, minuto, segundo, microsegundo). -
timedelta
: Representa la diferencia entre dos fechas o horas.
Creación de Fechas y Horas
Estas funciones permiten crear objetos de tipo fecha y hora.
-
date(año, mes, día)
: Crea una fecha (solo contiene año, mes y día).from datetime import datetime fecha = date(2024, 12, 19) print(fecha) # Salida: 2023-12-19
-
time(hora, minuto, segundo, microsegundo)
: Crea una hora (solo contiene hora, minuto, segundo y opcionalmente microsegundos).from datetime import time hora = time(15, 30, 45) print(hora) # Salida: 15:30:45
-
datetime(año, mes, día, hora, minuto, segundo, microsegundo
): Crea una combinación de fecha y hora.from datetime import datetime fecha_hora = datetime(2024, 12, 19, 15, 48, 45) print(fecha_hora) # Salida: 2024-12-19 15:48:45
-
replace(year, month, day, hour, minute, second, microsecond, tzinfo)
: Devuelve un nuevo objeto datetime con los atributos especificados reemplazados.from datetime import datetime # Crear una fecha y hora fecha_hora = datetime(2023, 10, 5, 12, 30, 45) # Usar el método replace para cambiar el año y la hora nueva_fecha_hora = fecha_hora.replace(year=2024, hour=15) print("Fecha y hora original:", fecha_hora) # Salida: Fecha y hora original: 2023-10-05 12:30:45 print("Nueva fecha y hora:", nueva_fecha_hora) # Salida: Nueva fecha y hora: 2024-10-05 15:30:45
-
ctime(secs)
: convierte un valor de tiempo dado en segundos (desde el Epoch, típicamente el 1 de enero de 1970 a las 00:00:00 UTC) en una cadena con un formato de fecha y hora legible por humanos. Si no se proporciona un valor de tiempo, la función devuelve la fecha y hora actuales del sistema.import time # Ejemplo: 1000000000 segundos desde el Epoch print(time.ctime(1000000000)) # Salida: Sat Sep 8 20:46:40 2001
Obtención de Fecha y Hora Actual
-
datetime.now()
: Devuelve la fecha y hora actual.from datetime import datetime now = datetime.now() print(now) # Salida: 2024-12-19 18:15:42.812317
-
date.today()
: Devuelve solo la fecha actual.from datetime import date today = date.today() print(today) # Salida: 2024-12-19
-
datetime.now(timezone.utc)
: Devuelve la fecha y hora actual en UTC (Tiempo Universal Coordinado).from datetime import datetime, timezone print("Hora actual en UTC:") utc_now = datetime.now(timezone.utc) # Alternativa para obtener UTC print(utc_now) # Salida: 2024-12-19 23:43:48.528313+00:00
Formateo Y Conversión
Estas funciones ayudan a convertir fechas y horas a cadenas de texto o viceversa.
-
strftime(formato)
: Convierte un objetodatetime
a una cadena de texto en un formato específico.from datetime import datetime # Obtener la fecha y hora actual fecha_hora = datetime.now() # Usar datetime.now() para obtener la fecha y hora actual # Formatear la fecha y hora formateada = fecha_hora.strftime('%Y-%m-%d %H:%M:%S') print(formateada) # Salida esperada: 2024-12-19 19:03:4
Formatos comunes:
-
%Y
: Año completo (2024) -
%m
: Mes (01-12) -
%d
: Día del mes (01-31) -
%H
: Hora (00-23) -
%M
: Minuto (00-59) -
%S
: Segundo (00-59)
-
-
strptime(cadena, formato)
: Convierte una cadena de texto a un objetodatetime
.from datetime import datetime texto = "2024-12-19 19:08:08" obj = datetime.strptime(texto, '%Y-%m-%d %H:%M:%S') print(obj) # Salida: 2024-12-19 19:08:08
Operaciones con Fechas y Horas
Estas funciones permiten realizar cálculos con fechas y horas
-
timedelta(días, segundos, minutos, horas)
: Representa un cambio en el tiempo, útil para sumar o restar.from datetime import datetime, timedelta # Obtener la fecha y hora actual fecha_hora = datetime.now() # Usar datetime.now() para obtener la fecha y hora actual print(fecha_hora) # Salida: 2024-12-19 19:27:53.169903 delta = timedelta(days=5, hours=3) nueva_fecha = fecha_hora + delta print(nueva_fecha) # Salida: 2024-12-24 22:27:53.169903
- Restar dos fechas u horas devuelve un timedelta.
diferencia = nueva_fecha - fecha_hora print(diferencia) # Salida: 5 days, 3:00:00
Propiedades y Métodos Útiles
Estas funciones extraen información específica de un objeto datetime.
-
year
,month
,day
: Obtienen el año, mes o día.from datetime import datetime, timedelta # Obtener la fecha y hora actual fecha_hora = datetime.now() print(fecha_hora.year) # Salida: 2024 print(fecha_hora.month) # Salida: 12 print(fecha_hora.day) # Salida: 19
-
hour
,minute
,second
,microsecond
: Obtienen la hora, minuto, segundo o microsegundo.from datetime import datetime, timedelta # Obtener la fecha y hora actual fecha_hora = datetime.now() print(fecha_hora.hour) # Salida: 19 print(fecha_hora.minute) # Salida: 52 print(fecha_hora.second) # Salida: 23
-
weekday()
: Devuelve el día de la semana como un entero (lunes=0, domingo=6). -
isoweekday()
: Devuelve el día de la semana como un entero (lunes=1, domingo=7).from datetime import datetime, timedelta # Obtener la fecha y hora actual fecha_hora = datetime.now() print(fecha_hora.weekday()) # Salida: 3 (jueves) print(fecha_hora.isoweekday()) # Salida: 4 (jueves)
Zona Horaria
Se utiliza para trabajar con zonas horarias específicas.
- datetime.timezone: Define un objeto de zona horaria.
from datetime import datetime, timezone, timedelta zona = timezone(timedelta(hours=-5)) # Zona horaria UTC-5 fecha_utc = datetime(2023, 12, 19, 15, 30, tzinfo=zona) print(fecha_utc) # Salida: 2023-12-19 15:30:00-05:00
- astimezone(zona): Convierte un objeto datetime a otra zona horaria.
from datetime import datetime, timezone, timedelta zona = timezone(timedelta(hours=-5)) # Zona horaria UTC-5 fecha_utc = datetime(2024, 12, 19, 19, 35, tzinfo=zona) print(fecha_utc) # Salida: 2024-12-19 19:35:00-05:00 zona_utc = timezone.utc nueva_zona = fecha_utc.astimezone(zona_utc) print(nueva_zona) # Salida: 2024-12-20 00:35:00+00:00
Constantes
-
INYEAR
: El año mínimo soportado (1). -
AXYEAR
: El año máximo soportado (9999). -
min
: El valor mínimo de timedelta (-999999999 días). -
max
: El valor máximo de timedelta (999999999 días). -
resolution
: La resolución de timedelta (1 microsegundo)
from datetime import datetime, timedelta
# Mínimo y máximo año soportado por datetime
print("Año mínimo soportado por datetime:", datetime.min.year) # Salida: 1
print("Año máximo soportado por datetime:", datetime.max.year) # Salida: 9999
# Valor mínimo de timedelta (es decir, -999999999 días)
print("Valor mínimo de timedelta:", timedelta.min) # Salida: -999999999 days, 0:00:00
# Valor máximo de timedelta (es decir, 999999999 días)
print("Valor máximo de timedelta:", timedelta.max) # Salida: 999999999 days, 23:59:59.999999
# Resolución de timedelta (es decir, 1 microsegundo)
print("Resolución de timedelta:", timedelta.resolution) # Salida: 0:00:00.000001
# Crear una fecha con el año mínimo (1)
min_fecha = datetime(datetime.min.year, 1, 1)
print("Fecha con el año mínimo:", min_fecha) # Salida: 0001-01-01 00:00:00
# Crear una fecha con el año máximo (9999)
max_fecha = datetime(datetime.max.year, 12, 31)
print("Fecha con el año máximo:", max_fecha) # Salida: 9999-12-31 00:00:00
# Sumar y restar los valores extremos de timedelta (Ajustado para no exceder los límites)
fecha_actual = datetime.now()
# Usamos valores más pequeños de timedelta en lugar de los extremos
fecha_min = fecha_actual + timedelta(days=-1) # Restar 1 día
fecha_max = fecha_actual + timedelta(days=1) # Sumar 1 día
print("Fecha actual:", fecha_actual)
print("Fecha actual menos un día:", fecha_min)
print("Fecha actual más un día:", fecha_max)