30- Date en Python

Acordeón de los Índices




Datetime

🕰️ Datetime: El Módulo para Fechas y Horas en Python

Python proporciona un módulo built-in llamado datetime que ofrece clases para trabajar con fechas y horas. Este módulo es esencial para cualquier tarea que involucre la manipulación de información temporal.

El módulo datetime contiene varias clases importantes:

  • datetime.date: Representa una fecha (año, mes, día).
  • datetime.time: Representa una hora (hora, minuto, segundo, microsegundo).
  • datetime.datetime: Representa una combinación de fecha y hora (año, mes, día, hora, minuto, segundo, microsegundo).
  • datetime.timedelta: Representa una duración, la diferencia entre dos fechas u horas.
  • datetime.timezone: Implementa la clase base abstracta para objetos de zona horaria.
  • datetime.tzinfo: Proporciona información sobre zonas horarias.

Para utilizar estas clases, primero necesitas importar el módulo datetime en tu script:

      
import datetime
      
     

La Clase datetime.datetime: El Corazón del Tiempo

La clase datetime.datetime es una de las más utilizadas. Permite crear objetos que representan un instante específico en el tiempo, con información tanto de la fecha como de la hora.

Ejemplo Básico con datetime.datetime:

      
import datetime

ahora = datetime.datetime.now()
print(ahora)
print(type(ahora))
      
     

Al ejecutar este código, la variable ahora contendrá un objeto datetime que representa la fecha y hora actuales de tu sistema. La salida mostrará la fecha y hora en formato AAAA-MM-DD HH:MM:SS.mmmmmm.

Accediendo a los Componentes de un Objeto datetime:

Puedes acceder a los componentes individuales de un objeto datetime utilizando sus atributos:

  • year
  • month
  • day
  • hour
  • minute
  • second
  • microsecond

Ejemplo Accediendo a Componentes:

      
import datetime

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

En los siguientes temas, exploraremos las clases datetime.date y cómo trabajar específicamente con fechas.

Dates

📅 Dates: Representando Fechas en Python

La clase datetime.date en Python te permite crear y manipular objetos que representan fechas calendario. Un objeto date tiene tres atributos principales: year, month y day.

Creando Objetos date:

Puedes crear un objeto date de varias maneras:

1. Especificando Año, Mes y Día:

La forma más directa es utilizando el constructor de la clase date(), que requiere tres argumentos enteros: año, mes y día.

      
import datetime

fecha_nacimiento = datetime.date(1990, 5, 15)
print(fecha_nacimiento)
print(type(fecha_nacimiento))
      
     

Esto creará un objeto date representando el 15 de mayo de 1990.

2. Obteniendo la Fecha Actual:

Puedes obtener la fecha actual utilizando el método de clase today().

      
import datetime

hoy = datetime.date.today()
print(hoy)
      
     

Esto creará un objeto date con la fecha actual (en Madrid, Comunidad de Madrid, España, hoy es 2025-04-23).

3. A partir de un Timestamp:

También puedes crear un objeto date a partir de un timestamp (el número de segundos transcurridos desde la "época", que es el 1 de enero de 1970 en UTC) utilizando el método de clase fromtimestamp().

      
import datetime
import time

timestamp = time.time()
fecha_desde_timestamp = datetime.date.fromtimestamp(timestamp)
print(fecha_desde_timestamp)
      
     

Accediendo a los Atributos de un Objeto date:

Una vez que tienes un objeto date, puedes acceder a sus componentes individuales:

      
import datetime

hoy = datetime.date.today()
print(f"Año: {hoy.year}")
print(f"Mes: {hoy.month}")
print(f"Día: {hoy.day}")
      
     

Operaciones con Objetos date:

Los objetos date admiten ciertas operaciones, como la comparación (==, !=, <, >, <=, >=) y la resta para obtener un objeto datetime.timedelta (que representa una duración).

      
import datetime

fecha1 = datetime.date(2025, 4, 20)
fecha2 = datetime.date(2025, 4, 25)

print(fecha1 < fecha2)
diferencia = fecha2 - fecha1
print(diferencia)
print(type(diferencia))
      
     

En el siguiente tema, veremos cómo se muestran los objetos date por defecto y cómo podemos personalizar su salida.

Date Output

📤 Date Output: La Representación de las Fechas

Cuando imprimes un objeto datetime.date en Python, se muestra por defecto en un formato estándar ISO 8601: AAAA-MM-DD (Año-Mes-Día).

Formato de Salida por Defecto:

      
import datetime

hoy = datetime.date.today()
print(hoy)

fecha_especifica = datetime.date(2023, 10, 26)
print(fecha_especifica)
      
     

La salida de este código sería:

     
2025-04-23
2023-10-26
     
    

Este formato es claro y universalmente reconocido, lo que lo convierte en una buena opción por defecto.

Personalizando la Salida de Fechas con strftime():

Sin embargo, a menudo necesitas mostrar las fechas en un formato diferente para tus usuarios o para cumplir con ciertos requisitos de formato. Para esto, los objetos date (y también los objetos datetime y time) tienen un método muy útil llamado strftime(). Este método te permite formatear la fecha (u hora) en una cadena de texto utilizando una serie de códigos de formato.

Códigos de Formato Comunes para Fechas:

  • %Y: Año con siglo como número decimal (ej. 2023).
  • %y: Año sin siglo como número decimal con cero a la izquierda (ej. 23).
  • %m: Mes como número decimal con cero a la izquierda (01-12).
  • %B: Nombre completo del mes según la localización (ej. April).
  • %b o %h: Nombre abreviado del mes según la localización (ej. Apr).
  • %d: Día del mes como número decimal con cero a la izquierda (01-31).
  • %A: Nombre completo del día de la semana según la localización (ej. Wednesday).
  • %a: Nombre abreviado del día de la semana según la localización (ej. Wed).
  • %w: Día de la semana como número decimal, donde el lunes es 0 y el domingo es 6.
  • %j: Día del año como número decimal con cero a la izquierda (001-366).
  • %U: Número de semana del año (domingo como primer día de la semana) como número decimal con cero a la izquierda (00-53).
  • %W: Número de semana del año (lunes como primer día de la semana) como número decimal con cero a la izquierda (00-53).
  • %c: Representación de fecha y hora preferida según la localización.
  • %x: Representación de fecha preferida según la localización.

Ejemplos de Formateo de Fechas con strftime():

      
import datetime

hoy = datetime.date.today()

formato1 = hoy.strftime("%d/%m/%Y")
print(f"Formato 1 (dd/mm/aaaa): {formato1}")

formato2 = hoy.strftime("%B %d, %Y")
print(f"Formato 2 (Mes día, año): {formato2}")

formato3 = hoy.strftime("%a, %d %b %Y")
print(f"Formato 3 (Día abr, día mes año): {formato3}")

formato4 = hoy.strftime("%d-%m-%y")
print(f"Formato 4 (dd-mm-aa): {formato4}")
      
     

La salida de este código (en Madrid el 23 de abril de 2025) sería:

     
Formato 1 (dd/mm/aaaa): 23/04/2025
Formato 2 (Mes día, año): April 23, 2025
Formato 3 (Día abr, día mes año): Wed, 23 Apr 2025
Formato 4 (dd-mm-aa): 23-04-25
     
    

Como puedes ver, el método strftime() te da un control total sobre cómo se representa la fecha como una cadena de texto.

En el siguiente tema, aprenderemos cómo crear objetos date de forma explícita.

Creating Date Objects

🛠️ Creating Date Objects: Dando Vida a las Fechas

Como mencionamos anteriormente, la clase datetime.date ofrece varios constructores y métodos de clase para crear objetos de fecha.

1. El Constructor date(year, month, day):

Esta es la forma más directa de crear un objeto date. Debes proporcionar el año, el mes y el día como números enteros. Es importante recordar que:

  • El año debe ser un entero dentro del rango permitido por la implementación (generalmente de MINYEAR a MAXYEAR en el módulo datetime, que suelen ser bastante amplios).
  • El mes debe ser un entero entre 1 y 12 (inclusive).
  • El día debe ser un entero válido para el mes y el año dados (por ejemplo, no puedes tener el 31 de abril). Python generará un error ValueError si los argumentos no son válidos.
      
import datetime

fecha1 = datetime.date(2020, 2, 29)  # Año bisiesto
print(fecha1)

fecha2 = datetime.date(2023, 6, 10)
print(fecha2)

# Intentar crear una fecha inválida generará un ValueError
# fecha_invalida = datetime.date(2023, 2, 30) # Esto causará un error
      
     

2. El Método de Clase today():

Este método de clase devuelve el objeto date correspondiente a la fecha local actual.

      
import datetime

hoy = datetime.date.today()
print(hoy)
      
     

3. El Método de Clase fromtimestamp(timestamp):

Como vimos antes, este método crea un objeto date a partir de un timestamp (un número de segundos desde la época).

      
import datetime
import time

timestamp_actual = time.time()
fecha_desde_ts = datetime.date.fromtimestamp(timestamp_actual)
print(fecha_desde_ts)
      
     

4. El Método de Clase fromordinal(ordinal):

Este método crea un objeto date a partir de un "ordinal gregoriano". El ordinal gregoriano del 1 de enero del año 1 es 1. Los ordinales para las fechas posteriores son secuenciales.

      
import datetime

# El ordinal para el 1 de enero de 2025
ordinal_2025_01_01 = datetime.date(2025, 1, 1).toordinal()
print(f"Ordinal del 1 de enero de 2025: {ordinal_2025_01_01}")

fecha_desde_ordinal = datetime.date.fromordinal(ordinal_2025_01_01)
print(f"Fecha desde el ordinal: {fecha_desde_ordinal}")

# Podemos obtener el ordinal de cualquier objeto date
hoy = datetime.date.today()
ordinal_hoy = hoy.toordinal()
print(f"Ordinal de hoy ({hoy}): {ordinal_hoy}")
fecha_desde_ordinal_hoy = datetime.date.fromordinal(ordinal_hoy)
print(f"Fecha desde el ordinal de hoy: {fecha_desde_ordinal_hoy}")
      
     

El método fromordinal() puede ser útil en cálculos que involucran la diferencia entre fechas.

Consideraciones al Crear Objetos date:

  • Validación: Python realiza validación básica de los argumentos (rango del mes, validez del día para el mes y año).
  • Inmutabilidad: Los objetos date son inmutables, lo que significa que una vez creados, no se pueden modificar. Las operaciones que parecen modificarlos en realidad crean nuevos objetos date.

Ahora que sabemos cómo crear objetos de fecha de diversas maneras, vamos a explorar el método strftime() con más detalle, ya que es crucial para formatear las fechas para su presentación.

The strftime() Method

⚙️ El Método strftime(): Dando Formato a Fechas y Horas

El método strftime() (abreviatura de "string format time") se llama en un objeto date, datetime o time y toma una cadena de formato como argumento. Esta cadena de formato contiene uno o más códigos de formato, cada uno precedido por un signo de porcentaje (%), que se reemplazan con los valores correspondientes de la fecha u hora.

Sintaxis:

     
objeto_fecha.strftime(formato)
objeto_datetime.strftime(formato)
objeto_hora.strftime(formato)
     
    

Tabla de Códigos de Formato Comunes:

Aquí tienes una tabla más completa de los códigos de formato más utilizados:

Código Significado Ejemplo
%Y Año con siglo como número decimal. 2023
%y Año sin siglo como número decimal con cero a la izquierda. 23
%m Mes como número decimal con cero a la izquierda. 04
%B Nombre completo del mes según la localización. April
%b o %h Nombre abreviado del mes según la localización. Apr
%d Día del mes como número decimal con cero a la izquierda. 23
%A Nombre completo del día de la semana según la localización. Wednesday
%a Nombre abreviado del día de la semana según la localización. Wed
%w Día de la semana como número decimal (domingo=0, lunes=1, ..., sábado=6). 3 (para Wednesday)
%j Día del año como número decimal con cero a la izquierda (001-366). 113 (para el 23 de abril)
%H Hora (reloj de 24 horas) como número decimal con cero a la izquierda (00-23). 14
%I Hora (reloj de 12 horas) como número decimal con cero a la izquierda (01-12). 02
%M Minuto como número decimal con cero a la izquierda (00-59). 30
%S Segundo como número decimal con cero a la izquierda (00-59). 15
%f Microsegundo como número decimal con cero a la izquierda (000000-999999). 000000
%p Equivalente según la localización de AM o PM. PM
%Z Nombre de la zona horaria (vacío si no se conoce). CEST
%% Un carácter literal '%'. %
%c Representación de fecha y hora preferida según la localización. Wed Apr 23 11:36:15 2025
%x Representación de fecha preferida según la localización. 04/23/25
%X Representación de hora preferida según la localización. 11:36:15

Ejemplos Combinando Códigos de Formato:

      
import datetime

ahora = datetime.datetime.now()

formato_completo = ahora.strftime("%Y-%m-%d %H:%M:%S")
print(f"Formato completo: {formato_completo}")

formato_dia_mes_anio_hora_minutos = ahora.strftime("%d %b %Y %H:%M")
print(f"Día Mes Año Hora:Minutos: {formato_dia_mes_anio_hora_minutos}")

formato_solo_hora_minutos_segundos = ahora.strftime("%I:%M:%S %p")
print(f"Solo hora (12h): {formato_solo_hora_minutos_segundos}")

hoy_formateado = ahora.strftime("Hoy es %A, %d de %B de %Y.")
print(hoy_formateado)
      
     

La salida de este código (aproximadamente a la hora actual en Madrid) sería:

     
Formato completo: 2025-04-23 11:36:15
Día Mes Año Hora:Minutos: 23 Apr 2025 11:36
Solo hora (12h): 11:36:15 AM
Hoy es Wednesday, 23 de April de 2025.
     
    

Consideraciones sobre la Localización:

Los nombres de los meses y los días de la semana (%B, %b, %A, %a) y las representaciones preferidas (%c, %x, %X) dependen de la configuración de localización de tu sistema operativo. Python utiliza esta información para generar las cadenas formateadas.

El método strftime() es una herramienta increíblemente flexible para presentar fechas y horas de la manera que necesites en tus aplicaciones.

Con esto, hemos cubierto los temas principales sobre cómo trabajar con fechas en Python. ¿Tienes alguna pregunta sobre strftime() o sobre algún otro aspecto que hayamos visto?




Publicar un comentario

0 Comentarios