Manejo De Fechas Con Python

Fecha de publicación: 15 Abril 2021
Tiempo de lectura: 4 min.
Premium: False
Número de visitas: 366


En Python, para nosotros poder trabajar con fechas, lo haremos a través del módulo datetime, módulo que se encuentra dentro de la biblioteca estándar de Python, así que para utilizarlo no hay necesidad de instalar absolutamente nada. 😎

Veamos un par de ejemplos.

Comencemos obteniendo la fecha actual. ⏰

>>> from datetime import datetime

>>> datetime.now()
>>> datetime.datetime(2021, 4, 15, 18, 4, 37, 517643)

En este caso para conocer la fecha actual hacemos uso de la función now, función que se encuentra dentro del módulo datetime.

La función now retorna un objeto de tipo datetime, el cual representa a una fecha en Python. En este caso a la fecha actual.

Dentro del objeto datetime encontraremos 7 valores los cuales se encuentran en el siguiente orden:

  • Año.
  • Mes.
  • Día.
  • Hora.
  • Minutos.
  • Segundos.
  • Milisegundos.

Para acceder a cada uno de estos valores podemos hacerlo usando los atributos del objeto.

>>> from datetime import datetime

>>> now = datetime.now()
>>>  now.year
2021

>>>  now.mounth
4

>>>  now.day
18

>>>  now.minute
4

>>>  now.second
35

En caso deseemos establecer un formato de salida para la fecha (Lo cual es muy común) podemos hacer uso del método strftime. El método recibe como argumento, mediante un string, el formato que deseamos utilizar.

El método retornar el string generado a partir de la fecha y el formato establecido. 😄

Aquí un listado de códigos de formato que podemos utilizar. No son los únicos, pero si los que consideró usaremos en nuestro día a día.

  • %m = Mes del año (01 -12)
  • %d = Día del mes.
  • %a = Día de la semana (versión corta).
  • %A = Día de la semana (versión larga).
  • %Y = Año (versión larga).
  • %y = Año (versión corta).
  • %H = Hora.
  • %M = Minutos (00 - 59).
  • %S = Segundos (00 -59).
  • %a = Día de la semana (versión corta).
  • %A = Día de la semana (versión larga).
  • %w = Día del mes (0 - 6) donde 0 es Domingo.
  • %Z = TimeZone.
  • %-I = Hora del día en formato 12 horas.
  • %p = Local AM o PM
  • %x = Representación de la fecha actual (04/15/21)
  • %X = Representación de la hora actual (12:10:05)

Veamos un par de ejemplos.

# Fecha y hora actual.
>>> now.strftime('%Y-%m-%d %H:%M:%S')
>>> '2021-04-15 18:07:55'

# Hora actual.
>>> now.strftime('%H:%M:%S')
>>> '18:07:55'

# Hora actual en formato AM o PM.
>>> now.strftime('%I %p')
>>> '06 PM'

# Día de la semana y minuto actual.
>>> now.strftime('%A - %M')
>>>'Thu - Minuto actual: 07'

# Año actual
>>> now.strftime('%Y')
'2021'

Formatos con mensajes.

>>> now.strftime('El año en curso es: %Y')
'El año en cuso es: 2021'

>>> now.strftime('La hora actual es: %H:%M:%S')
>>> 'La hora actual es: 8:07:55'

>>> now.strftime('Hora: %I %p')
>>> 'Hora: 06 PM'

Como hemos observado, podemos utilizar cualquier tipo de carácter al momento de definir el formato de nuestra fecha, inclusive, podemos definir el mensaje final que deseamos generar. 🚀

Métodos

Los objetos de tipo datetime posee un par de métodos que sin duda nos pueden ser de utilidad al momento de intentar conocer alguno de sus atributos.

# Obtenemos el día de la semana
>>> now.isoweekday()
6

# Retorna una tupla con año, semana y día de la semana.
>>> now.isocalendar()
(2021, 15, 6)

# Retorna un string con formato YYYY-MM-DD
>>> now.isoformat()
2021-04-17T11:20:09.283371'

Modificar fechas

Ok, ya sabemos obtener la fecha actual y dar un formato de salida con respecto a nuestras necesidades, ahora lo que haremos será aprender a modificar fechas, ya sea añadiendo o substrayendo días, minutos, horas etc.... Es algo relativamente sencillo, y para ello haremos uso de la función timedelta del módulo datetime.

Veamos un ejemplo.

>>> from datetime import datetime
>>> from datetime import timedelta

>>> now = datetime.now()

>>> now + timedelta(days=10)
datetime.datetime(2021, 4, 25, 18, 26, 52, 4552)

Para este ejemplo añadimos 10 días a la fecha actual, obteniendo como resultado un objeto de tipo datetime.

Si queremos substraer días, haremos el proceso inverso, restaremos.

>>> now = datetime.now()

>>> now - timedelta(days=30)
datetime.datetime(2021, 3, 16, 18, 36, 35, 365030)

Podemos hacer uso de la función timedelta ya sea con o sin el parámetro days:

timedelta(30) 

o 

timedelta(days=30)

En ambos casos obtendremos el mismo resultado. 🤠

Si por el contrario, no queremos añadir o substraer días, podemos utilizar de los diferentes parámetros que la función posee.

>>> from datetime import timedelta
>>> delta = timedelta(
        days=50,
        seconds=27,
        microseconds=10,
        milliseconds=29000,
        minutes=5,
        hours=8,
        weeks=2
    )

Utilizando la función delta podremos añadir o substraer días, segundos, milisegundos, minutos, horas y hasta semanas, ya sea de forma individual o en conjunto. 😎

# Añadimos 5 días y 4 horas a la fecha actual.
>>> delta = timedelta(days=5, hours=4)
>>> now + delta

Y, hablando sobre modificar fechas, algo muy recurrente es sin duda comparar fechas, y para ello, como con cualquier otra comparación, usaremos los operadores relacionales.

>>> now = datetime.now()
>>> next_date +timedelta(days=30)

>>> next_date > now
True

Crear nuevas fechas

Ahora ¿Qué pasa si deseamos crear un objeto datetime a partir de una fecha ya definida? Bueno, en esos casos tenemos, principalmente, 3 formas de hacerlo. Ya sea utilizando un string, un timestamp o simplemente instanciando un objeto datetime.

Veamos cada uno de ellos.

Comencemos creando la fecha a partir de un string, y para ello haremos uso de la función strptime del módulo datime, además de los formatos previamente mencionados.

Ejemplo 1

>>> date_str = '2021/08/17 15:00:00'
>>> date_time = datetime.strptime(date_str , '%Y/%m/%d %H:%M:%S')

>>> date_time.year
2021

>>> date_time.month
8

>>> date_time.day
17

Para poder crear un objeto datetime a partir de un string, el string debe tener un formato de fecha, de lo contrario no será posible crear el objeto.

Ejemplo 2

>>> date_str = '17 - 08 - 2021'
>>> date_time = datetime.strptime(date_str , '%d - %m - %Y')

>>> date_time
datetime.datetime(2021, 8, 17, 0, 0)

Listo, ahora creemos un objeto datetime utilizando un timestamp. Para esto haremos uso de la función fromtimestamp.

>>> timestamp= 1618530736
>>> date_time = datetime.fromtimestamp(timestamp)

>>> date_time .strftime('%Y-%m-%d %H:%M:%S')
'2021-04-15 18:52:16'

>>> date_time.strftime("%x")
'04/15/21'

>>> date_time.strftime("%x")
'18:52:16'

Para crear un objeto datetime basta con asignar los valores que deseemos almacenar para cada uno de sus atributos (Año, mes día, hora, muntos, segundos).

>>>  new_date = datetime(2021, 8, 17, 15, 0, 0)
>>> new_date.year
2021

>>> new_date.hour
15

>>> new_date.month
8

Conclusión

Cómo pudimos aprender, el manejo de fechas con Python es relativamente sencillo. Para ello haremos uso del módulo datetime, el cual nos permitirá trabajar con objetos de tipo datetime, objetos los cuales representa una fecha en Python.

A través de estos objetos seremos capaces crear fechas, modificarlas, darles un formato, compararlas etc... 🥦

Ya para finalizar me gustaría compartir con todos ustedes un pequeño tip relacionado con el tema:

¿Sabían que en Python es posible desplegar un calendario directamente en consola?

>>> import calendar

>>> print(calendar.month(2021, 4))
     April 2021
Mo Tu We Th Fr Sa Su
          1  2  3  4
 5  6  7  8  9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30

Y si te interesa el tema de zonas horarias te recuerdo tenemos un post donde hablamos de ello. Espero puedas echarle un vistazo. 🚀

Más Tips y Ejercicios 🐍

Adquiere una subscripción PyWombat por tan solo $3 USD. al mes.

Conoce los beneficios de ser usuario premium:
Niveles desbloqueados: Ten accesos a todos los niveles de ejercicios. 🔓
Nuevo límite: Incrementa tu límite de ejercicios por semana. 🚀
Contenido único: Recibe semanalmente recursos exclusivos de Python (Videos, Artículos y Capitulos del libro PyWombat, comienza como desarrollador Python. 🐍