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