Saltar a contenido

Trabajar con fechas

Hasta ahora hemos trabajado con diferentes tipos de datos:

  • Números enteros, sin decimales, que son objetos de la clase int
  • Números con decimales, que son objetos de la clase float
  • Cadenas de texto, que son objetos de la clase str
  • Valores booleanos, True y False, que son objetos de la clase bool
  • Listas que son objetos de la clase list
  • Tuplas que son objetos de la clase tuple
  • Diccionarios que son objetos de la clase dict

Todos estos tipos son built-in, es decir, definidos por el lenguaje. Pero la biblioteca de Python incluye módulos que definen otro tipos de datos. Uno de ellos es el módulo datetime, que proporciona mecanismos para trabajar con fechas, horas, minutos y segundos.

Objetos datetime

El tipo de dato datetime almacena momentos. Un momento es, por ejemplo:

día 12 de junio de 2025 a las 12:34

O bien, si solo queremos la fecha:

día 12 de junio de 2025 a las 00:00

Una fecha se crea así:

Fecha.py
1
2
3
4
from datetime import datetime
hoy = datetime(2025, 6, 12)
print(hoy)
print(type(hoy))

Lo que muestra:

2025-06-12 00:00:00
<class 'datetime.datetime'>

Vemos que el módulo datetime define un tipo de igual nombre, datetime. Por ese motivo, importamos el tipo, no el módulo:

from datetime import datetime

Podemos crear un objeto de cualquier tipo (incluidos los tipos built in) invocando una función constructora del mismo nombre que el tipo:

x = float(0)
texto = str(0)
hoy = datetime(2025, 6, 12)

La función datetime() permite especificar horas, minutos y segundos, que son parámetros opcionales (el valor por defecto es cero)

from datetime import datetime
hoy = datetime(2025, 6, 12, 11, 35, 0)
print(hoy)

Lo que muestra:

2025-06-12 11:35:00

Obtener el momento actual

El métodon now() asociado al tipo datetime devuelve la fecha y hora actual:

>>> from datetime import datetime
>>> ahora=datetime.now()
>>> print(ahora)
    2024-06-10 12:12:17.348933

Lapso entre dos fechas

El lapso de tiempo entre dos momentos es un objeto del tipo timedelta

>>> from datetime import datetime
>>> fecha = datetime(2004,3,27)
>>> print(fecha)
    2004-03-27 00:00:00

>>> from datetime import timedelta
>>> dias=timedelta(days=10)
>>> fecha2 = fecha+dias
>>> fecha2
    2004-04-06 00:00:00

>>> semanas=timedelta(weeks=20)
>>> fecha3 = fecha+semanas
    2004-08-14 00:00:00

Los lapsos se pueden sumar o restar a una fecha para obtener otra fecha. Se crean mediante:

dias=timedelta(days=10)
semanas=timedelta(weeks=20)

Podemos pasar las siguientes unidades:

  • weeks
  • days
  • hours
  • minutes
  • seconds
  • milliseconds
  • microseconds

Podemos combinar unidades de tiempo para obtener un lapso:

intervalo = datetime.timedelta(
    days=1,
    hours=10,
    minutes=22)

Podemos calcular el intervalo entre dos fechas:

>>> ahora=datetime.now()
>>> ahora
>>> print(ahora)
    2024-06-10 12:12:17.348933

>>> fecha = datetime(2024,3,27)
>>> ahora-fecha
    datetime.timedelta(days=75, seconds=43937, microseconds=348933)

Extraer componentes

La clase datetime tiene métodos para extraer los componentes de una fecha:

>>> from datetime import datetime
>>> ahora = datetime.now()
>>> print(
... ahora.year,
... ahora.month,
... ahora.day,
... ahora.hour,
... ahora.minute,
... ahora.second,
... )

    2025 7 12 11 51 4

La clase timedelta también permite extraer sus componentes:

>>> from datetime import datetime
>>> ahora = datetime.now()
>>> fecha = datetime(2025, 6, 12)
>>> lapso = ahora-fecha

>>> lapso.seconds
    43545

>>> lapso.days
     30

>>> horas=lapso.seconds/3600
>>> horas
    12.095833333333333