El Módulo datetime, Funciones para Manejo de la Hora y la Fecha en Python
Introducción
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 objetodatetimea 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:4Formatos 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)