HOWTO · Python

Comparar dos fechas en Python

Este tutorial demuestra cómo se pueden comparar y comprobar dos fechas que son mayores en Python.

En esta página

Usa los operadores de comparación de Python cuando dos valores tengan tipos compatibles. Al comparar valores date, se ordenan los días del calendario; con datetime también se tiene en cuenta la hora. No se puede ordenar directamente un date y un datetime: compara valores del mismo tipo o conviértelos deliberadamente a una representación común. Analiza las cadenas antes de compararlas y resta valores de fecha y hora cuando necesites obtener un intervalo transcurrido. Por ejemplo, en un sistema de reservas puedes comparar las fechas solicitadas y las reservadas para determinar el orden o detectar conflictos.

Comparar objetos date con operadores de comparación

Importa la clase date del módulo datetime para comparar fechas del calendario sin tener en cuenta la hora del día. Los operadores <, >, <=, >=, == y != comparan el año, el mes y el día en orden cronológico. Por ejemplo, el 29 de junio es posterior al 9 de junio; la expresión booleana le pide a Python que compruebe ese orden.

Ejecuta este ejemplo:

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

from datetime import date

start = date(2023, 6, 9)
end = date(2023, 6, 29)
print(end > start)
True

El ejemplo muestra True: el 29 de junio es posterior al 9 de junio. Usa date cuando solo importe el día del calendario, por ejemplo, para comprobar si ya venció una fecha límite. Ambos operandos deben ser valores date. No ordenes directamente un date frente a un datetime: Python requiere tipos de operandos compatibles para ordenarlos. Compara valores del mismo tipo o conviértelos deliberadamente a una representación común. Una cadena como "2023-06-29" no se convierte automáticamente al compararla.

Comparar objetos datetime cuando la hora importa

Usa la clase datetime cuando la hora del día deba influir en el resultado. La comparación incluye los campos de fecha y hora, así que dos valores del mismo día pueden ordenarse por hora, minuto y unidades menores. Los siguientes valores corresponden al mismo día, pero las 16:30 son posteriores a las 9:00.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

from datetime import datetime

morning = datetime(2023, 6, 29, 9, 0)
afternoon = datetime(2023, 6, 29, 16, 30)
print(afternoon > morning)
True

El ejemplo muestra True. Los valores datetime ingenuos (sin información de zona horaria) se pueden comparar con otros valores ingenuos. Para los valores conscientes de la zona horaria, usa información de zona horaria compatible. Python no permite ordenar un datetime ingenuo frente a uno consciente; normaliza los valores según una política común de zona horaria antes de compararlos. Elige date si las distintas horas de un mismo día deben considerarse iguales.

Analizar cadenas de fecha con time.strptime()

Antes de comparar fechas escritas como texto, necesitas conocer su formato. La función time.strptime() analiza una cadena según un formato y devuelve un struct_time; después, esas tuplas analizadas se pueden comparar en orden cronológico. El formato siguiente corresponde a una entrada día/mes/año, así que %d/%m/%Y interpreta 30/11/2020 como el 30 de noviembre de 2020.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import time

first_text = "30/11/2020"
second_text = "12/10/2019"
first_date = time.strptime(first_text, "%d/%m/%Y")
second_date = time.strptime(second_text, "%d/%m/%Y")
print(first_date > second_date)
True

El ejemplo muestra True: la primera fecha analizada es posterior a la segunda según sus campos de año, mes y día. Haz que la cadena de formato coincida exactamente con la entrada: %m/%d/%Y indicaría un orden distinto. No compares directamente cadenas de fecha para determinar el orden cronológico, porque el orden de sus caracteres podría no coincidir con el del calendario. Si la entrada puede variar o requiere gestionar zonas horarias, analízala en una representación datetime adecuada.

Usar timedelta para comparar intervalos de fechas

Restar una fecha date de otra, o un valor datetime de otro compatible, produce un timedelta. Es un intervalo transcurrido, no una fecha. Compáralo con otro timedelta para saber si ha pasado suficiente tiempo; usa operadores de comparación en las fechas originales para determinar cuál ocurre primero.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

from datetime import date, timedelta

start = date(2023, 6, 9)
end = date(2023, 6, 29)
elapsed = end - start
print(elapsed > timedelta(days=7))
True

El ejemplo muestra True. La resta produce un intervalo de 20 días, superior al umbral de siete días. timedelta admite unidades como días, segundos, minutos, horas y semanas; representa una duración y no tiene en cuenta los meses ni los años del calendario, cuya duración varía. Para calcular un intervalo entre valores datetime, asegúrate de que ambos sigan las mismas reglas de información de zona horaria y de uso de zonas horarias.