🇯🇵 日本語 | 🇺🇸 English | 🇪🇸 Español | 🇵🇹 Português | 🇹🇭 ไทย | 🇨🇳 中文

¡Domina las Fechas y Horas en Python con el Módulo datetime!

Para ejecutar Python desde el símbolo del sistema o PowerShell en tu PC, necesitas descargar e instalar Python.
Si aún no lo has hecho, consulta el artículo Instalación de Python y configuración del entorno de desarrollo para instalar Python.

Cuando desarrollas sitios web o aplicaciones, a menudo te encuentras con situaciones en las que necesitas manejar fechas y horas, como "mostrar la hora actual", "registrar la fecha de publicación de un artículo" o "calcular el tiempo restante para una oferta". Es en esos momentos cuando el módulo datetime, que viene integrado en Python, se convierte en tu mejor aliado.

En este artículo, explicaremos desde el uso básico del módulo datetime hasta algunas técnicas un poco más avanzadas, con ejemplos de código que incluso los principiantes pueden copiar y pegar para experimentar cómo "simplemente funciona". ¡Vamos a sumergirnos en el mundo de las fechas y las horas! 🚀


Lo Básico del Módulo datetime

Para empezar, veamos cómo preparar el módulo datetime y su función más fundamental: "obtener la fecha y hora actuales".

Importar el Módulo

Para usar el módulo datetime, primero debes importarlo (cargarlo) al principio de tu código. Sin esto, Python te preguntará: "¿Qué es datetime?".

import datetime

Obtener la Fecha y Hora Actual

Obtener la fecha y la hora de este preciso instante es muy fácil. Solo tienes que llamar a `datetime.datetime.now()`.

import datetime

# Obtener la fecha y hora actual
now = datetime.datetime.now()
print(now)

# Ejemplo de salida: 2025-07-11 07:42:15.123456

Si no necesitas la hora y solo quieres la fecha de hoy, usa `datetime.date.today()`.

import datetime

# Obtener solo la fecha de hoy
today = datetime.date.today()
print(today)

# Ejemplo de salida: 2025-07-11

Acceder a los Elementos Individuales de Fecha y Hora

Del objeto `datetime` que has obtenido, puedes extraer información individual como el año, mes, día, hora, minuto y segundo. Esto es útil, por ejemplo, si quieres mostrar algo como "El año actual es 2025".

import datetime

now = datetime.datetime.now()

print(f"Año: {now.year}")
print(f"Mes: {now.month}")
print(f"Día: {now.day}")
print(f"Hora: {now.hour}")
print(f"Minuto: {now.minute}")
print(f"Segundo: {now.second}")
print(f"Microsegundo: {now.microsecond}")

Crear una Fecha y Hora Específicas

Por supuesto, no solo puedes obtener la hora actual, sino también crear objetos que representen una fecha y hora específicas del pasado o del futuro. Esto se usa para especificar fechas como tu cumpleaños o el día de lanzamiento de un servicio.

import datetime

# Especificar el 1 de enero de 2026 a las 9:30:00
specific_datetime = datetime.datetime(2026, 1, 1, 9, 30, 0)
print(specific_datetime)

# Salida: 2026-01-01 09:30:00

Formatear Fechas y Horas para una Mejor Lectura

Un formato como `2025-07-11 07:42:15` no está mal, pero en un sitio web, a veces querrás mostrarlo de una forma más comprensible, como "11 de julio de 2025, 07:42". Para eso está el método `strftime()`.

Convertir a Cadena con el Formato que Quieras usando strftime()

`strftime()` es la abreviatura de "string format time" (formatear tiempo a cadena), y convierte un objeto `datetime` a una cadena de texto con un formato específico. Para especificar el formato, se usan "códigos de formato" como `%Y` o `%m`.

import datetime
import locale

# Establecer la localización en español para nombres de meses y días
# Puede requerir configuración en el sistema ('es_ES', 'es_ES.UTF-8', 'Spanish_Spain.1252', etc.)
try:
    locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8')
except locale.Error:
    print("Localización 'es_ES.UTF-8' no soportada, usando la predeterminada.")

now = datetime.datetime.now()

# Convertir a cadena especificando un formato
# %d de %B de %Y es un formato común en español
formatted_string = now.strftime("%d de %B de %Y, %H:%M:%S")
print(formatted_string)

# Ejemplo de salida: 11 de julio de 2025, 07:42:15

Aquí tienes algunos de los códigos de formato más utilizados:


Convertir una Cadena a Fecha y Hora con strptime()

Por el contrario, a veces querrás convertir datos en formato de cadena como "11/07/2025" a un objeto `datetime` que tu programa pueda manejar. En ese caso, se usa el método `strptime()`, que significa "string parse time" (analizar tiempo desde cadena).

Importante: Al usar `strptime()`, es crucial que el formato de la cadena original y el código de formato que especifiques coincidan perfectamente. Si no coinciden, obtendrás un error, así que ten cuidado.

import datetime

date_string = "11 de julio de 2025"

# Para que el mes "julio" sea reconocido, es posible que necesites configurar la localización
# import locale
# locale.setlocale(locale.LC_TIME, 'es_ES.UTF-8')

# Convertir la cadena a un objeto datetime especificando el formato
# En este ejemplo, como solo es una fecha, se convierte en un objeto date
date_obj = datetime.datetime.strptime(date_string, "%d de %B de %Y").date()

print(date_obj)
print(type(date_obj))

# Salida:
# 2025-07-11
# <class 'datetime.date'>

Avanzado: ¡Hagamos cálculos con fechas y horas!

El verdadero poder del módulo datetime reside en su capacidad para realizar cálculos con fechas y horas de forma sencilla. Puedes hacer operaciones intuitivas como "¿Qué fecha será dentro de una semana?" o "¿Cuántos días faltan para que termine la oferta?" usando objetos `timedelta`.

Expresar Diferencias de Tiempo con timedelta

Un `timedelta` es un objeto que representa una duración, es decir, la diferencia entre dos momentos en el tiempo. Se crea especificando días, segundos, microsegundos, etc.

import datetime

now = datetime.datetime.now()
print(f"Hora actual: {now.strftime('%Y-%m-%d %H:%M')}")

# Calcular la fecha de una semana después
una_semana_despues = now + datetime.timedelta(weeks=1)
print(f"Dentro de 1 semana: {una_semana_despues.strftime('%Y-%m-%d %H:%M')}")

# Calcular la fecha de hace 3 días
hace_tres_dias = now - datetime.timedelta(days=3)
print(f"Hace 3 días:  {hace_tres_dias.strftime('%Y-%m-%d %H:%M')}")

# Calcular la hora 10 horas y 30 minutos después
diez_horas_despues = now + datetime.timedelta(hours=10, minutes=30)
print(f"En 10h 30min: {diez_horas_despues.strftime('%Y-%m-%d %H:%M')}")

Calcular la Diferencia Entre Dos Fechas

Cuando restas un objeto `datetime` de otro, el resultado es un objeto `timedelta`. Puedes usar esto para calcular, por ejemplo, el número de días que quedan hasta una fecha específica.

import datetime

# La fecha de hoy
hoy = datetime.date.today()

# Fecha objetivo (por ejemplo, el Año Nuevo de 2026)
ano_nuevo_2026 = datetime.date(2026, 1, 1)

# Calcular la diferencia entre las dos fechas
delta = ano_nuevo_2026 - hoy

print(f"Faltan {delta.days} días para el Año Nuevo de 2026.")

Un Punto a Considerar: La Trampa de las Zonas Horarias

Las fechas y horas que hemos manejado hasta ahora son, en realidad, objetos "ingenuos" (naive), que no tienen información de zona horaria. Esto está bien para scripts sencillos de uso personal, pero al crear un servicio web al que acceden usuarios de todo el mundo, las zonas horarias son un problema ineludible.

Por ejemplo, las "9 de la mañana del 11 de julio" en Japón y las "9 de la mañana del 11 de julio" en Estados Unidos son momentos completamente diferentes. Para manejar esta diferencia correctamente, necesitas usar objetos "conscientes" (aware), que sí contienen información de la zona horaria.

A partir de Python 3.9, puedes manejar zonas horarias fácilmente con el módulo `zoneinfo` de la biblioteca estándar.

import datetime
from zoneinfo import ZoneInfo

# Obtener la hora actual especificando una zona horaria
tz_tokio = ZoneInfo("Asia/Tokyo")
ahora_tokio = datetime.datetime.now(tz_tokio)
print(f"Hora actual en Tokio: {ahora_tokio}")

tz_nuevayork = ZoneInfo("America/New_York")
ahora_nuevayork = datetime.datetime.now(tz_nuevayork)
print(f"Hora actual en Nueva York: {ahora_nuevayork}")

# Se puede ver que la información de la zona horaria está adjunta
# Ejemplo de salida:
# Hora actual en Tokio: 2025-07-11 07:42:15.123456+09:00
# Hora actual en Nueva York: 2025-07-10 18:42:15.123456-04:00

Cuando desarrolles servicios internacionales, ¡asegúrate siempre de implementar la lógica teniendo en cuenta las zonas horarias!


[Práctica] ¡Copia, Pega y Ejecuta! Muestra la Hora Actual en una Página Web

Finalmente, usando lo que has aprendido, aquí tienes un ejemplo de HTML completo que puedes copiar y pegar para mostrar la Hora Estándar de Japón (JST) en tiempo real en una página web. Si guardas este código como un archivo HTML, funcionará simplemente abriéndolo en tu navegador.
※Este ejemplo incluye JavaScript dentro del HTML para actualizar la hora en tiempo real.

Guarda el siguiente código en un archivo llamado `reloj.html` y ábrelo en tu navegador.

<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Visualización de la Hora en Tiempo Real</title>
    <style>
        body {
            background-color: #202124;
            color: #e8eaed;
            font-family: sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            margin: 0;
            flex-direction: column;
        }
        h1 {
            color: #669df6;
        }
        #clock {
            font-size: 3rem;
            font-weight: bold;
            background-color: #3c4043;
            padding: 20px 40px;
            border-radius: 10px;
        }
    </style>
</head>
<body>
    <h1>Hora Actual en Japón</h1>
    <div id="clock">--:--:--</div>

    <script>
        function updateClock() {
            // Generar la hora en el Horario Estándar de Japón (JST, UTC+9)
            const now = new Date();
            const jstOffset = 9 * 60; // JST es UTC+9 horas
            const localOffset = -now.getTimezoneOffset(); // Desplazamiento de la zona horaria local en minutos
            const jstNow = new Date(now.getTime() + (jstOffset - localOffset) * 60 * 1000);

            const hours = String(jstNow.getHours()).padStart(2, '0');
            const minutes = String(jstNow.getMinutes()).padStart(2, '0');
            const seconds = String(jstNow.getSeconds()).padStart(2, '0');
            
            document.getElementById('clock').textContent = `${hours}:${minutes}:${seconds}`;
        }

        // Actualizar el reloj cada segundo
        setInterval(updateClock, 1000);

        // Ejecutar por primera vez al cargar la página
        updateClock();
    </script>
</body>
</html>

Resumen

En este artículo, hemos aprendido a manejar fechas y horas usando el módulo `datetime` de Python.

Una vez que domines el módulo `datetime`, se ampliará enormemente el abanico de cosas que puedes crear, como marcas de tiempo para logs, registro de fechas de alta de usuarios y cuentas regresivas para eventos. ¡No dudes en experimentar con el código de este artículo y prueba a crear tus propios programas!

Próximos Pasos

Ahora que te sientes cómodo manejando fechas y horas, ¿por qué no intentas con las operaciones de archivos y directorios? El siguiente artículo explica cómo leer y escribir archivos y crear/eliminar carpetas con Python.

Domina las Operaciones de Archivos y Directorios con el Módulo os »