Contenido del capítulo

Aprende a trabajar con fechas en Python de forma sencilla y práctica. Descubre cómo usar las funciones del módulo datetime, formatear fechas a tu medida, traducirlas al español y mucho más.

Duración estimada de todo el contenido:
Duración del vídeo:
Contiene 2 ejercicios Contiene 4 vídeos.
Tabla de contenidos
Logo

    ¿Qué es el módulo datetime?

    Python tiene prácticamente de todo, algo que por supuesto no le falta, es un módulo dedicado al manejo de fechas y horas. Se trata de datetime.

    Es un módulo muy extenso, así que nos vamos a centrar en las partes más importantes para empezar con las fechas y horas (las clases time, date y datetime). Cada una de estas clases, tiene muchos métodos.

    Los nombres de las clases time, date y datetime, no cumplen la convención de nombres de clase, por retrocompatibilidad.

    El término time se traduce al español como tiempo, aunque en el contexto de su uso en Python, podríamos traducirlo también como hora.

    El término date se traduce al español como fecha.

    Espacio publicitario

    Referencia de datetime

    La referencia del módulo datetime, la encontrarás en esta página:

    Referencia oficial del módulo datetime de Python.

    Importar el módulo datetime de Python

    El módulo datetime de Python, al igual que math, ya viene integrado en el lenguaje, de forma que para importarlo no hay que instalar nada; solo hacer el import:

    import datetime

    La clase time de datetime

    Empecemos por la clase time. Esta clase está enfocada al manejo de horas en Python.

    Al ser time una clase, para crear datos de este tipo, estaremos instanciando objetos de tiempo (de tipo time).

    Manejo de horas - Clase time del módulo datetime
    Manejo de horas - Clase time del módulo datetime

    Crear un objeto time

    Podemos crear un objeto de tipo time de la siguiente forma:

    import datetime
    
    # Se crea un objeto de tipo time
    hora = datetime.time()
    
    # Se imprime la hora almacenada
    print(hora)
    Resultado en la consola
    00:00:00

    Esto crea un objeto de tipo time, con un valor por defecto de 00:00:00. Si queremos almacenar una hora en concreto, podemos poner argumentos. El primero corresponde a la hora, el segundo a los minutos, el tercero a los segundos y el cuarto a los microsegundos.

    Un microsegundo equivale a una millonésima parte de un segundo.

    En el siguiente ejemplo, se construye una hora completa mediante estos argumentos:

    import datetime
    
    # Se crea un objeto de tipo time
    hora = datetime.time(14, 30, 20, 7577)
    
    # Se imprime la hora almacenada
    print(hora)
    Resultado en la consola
    14:30:20.007577

    Si quieres prescindir de los microsegundos, utiliza solo los tres primeros argumentos:

    hora = datetime.time(14, 30, 20)
    Resultado en la consola
    14:30:20

    Acceder a los elementos de time por separado

    Una de las funcionalidades que tiene este tipo de objeto, es que puedes usar atributos dedicados a devolverte solo una de las partes de la hora.

    Espacio publicitario

    En cada uno de los siguientes print(), estoy accediendo a los atributos mediante un punto, de la misma forma que hacemos con los atributos de nuestros propios objetos.

    import datetime
    
    # Se crea un objeto de tipo time
    hora = datetime.time(14, 30, 20, 656)
    
    # Se imprimen varios de sus atributos
    print(f"Hora: {hora.hour}")
    print(f"Minutos: {hora.minute}")
    print(f"Segundos: {hora.second}")
    print(f"Microsegundos: {hora.microsecond}")
    Resultado en la consola
    Hora: 14
    Minutos: 30
    Segundos: 20
    Microsegundos: 656

    En inglés, hora se traduce como hour, minuto como minute, segundo como second y microsegundo como microsecond.

    Clase date del módulo datetime

    Ahora que ya sabes lo más básico sobre las horas de Python, es el momento de ver las fechas; para trabajar con fechas, necesitaremos objetos de tipo date.

    Introducción al manejo de fechas con Python - Clase date del módulo datetime
    Introducción al manejo de fechas con Python - Clase date del módulo datetime

    Al siguiente objeto, le pasaremos como primer argumento, el año. Como segundo el mes, y como tercero el día del mes:

    import datetime
    
    # Se crea un objeto de tipo date
    fecha = datetime.date(2027, 12, 20)
    
    # Se imprime la fecha almacenada
    print(fecha)
    Resultado en la consola
    2027-12-20

    Si quieres trabajar con la fecha en elementos separados, puedes usar atributos para hacer referencia a cada valor:

    import datetime
    
    #Se crea un objeto de tipo date
    fecha = datetime.date(2027,12,20)
    
    #Se imprime la fecha almacenada
    print(f"Año: {fecha.year}")
    print(f"Mes: {fecha.month}")
    print(f"Día: {fecha.day}")
    Resultado en la consola
    Año: 2027
    Mes: 12
    Día: 20

    En inglés, año se traduce como year, mes como month y día como day.

    Espacio publicitario

    Obtener la fecha actual

    Formatear fechas con Python
    Formatear fechas con Python

    Con Python puedes obtener la fecha actual en el momento de ejecutar el programa. Esto es posible con el método today() de la clase date, del módulo datetime:

    import datetime
    
    #Se crea un objeto de tipo date y se obtiene la fecha del día
    fecha_hoy = datetime.date.today()
    
    #Se imprime la fecha almacenada
    print(fecha_hoy)
    Resultado en la consola
    2024-02-27

    Obtener la hora actual

    Para obtener la hora actual, junto con la fecha actual, necesitamos utilizar el método now() de la clase datetime, del módulo datetime:

    import datetime
    
    # Se obtiene la hora y fecha en la ejecución
    hora_actual = datetime.datetime.now()
    
    # Se imprime la hora y fecha almacenadas
    print(hora_actual)
    Resultado en la consola
    2024-02-27 15:56:56.796555

    De esta fecha y hora en conjunto, puedes extraer los atributos que necesites. Por ejemplo, quieres solo la hora, utiliza el atributo hour tal y como he mostrado más arriba. ¿Quieres el día? Pues usa day. Lo mismo con el resto.

    También tenemos una serie de códigos de formateo de fechas, con los que podemos obtener en una cadena de caracteres las partes que nos interesen.

    Espacio publicitario

    A continuación, tienes el listado de códigos que puedes utilizar, su significado, y un ejemplo de uso. En uno de los próximos ejemplos, verás cómo usarlos.

    Código Significado Ejemplo de uso
    %a Nombre abreviado del día de la semana. Fry, Sat
    %A Día entero de la semana. Fryday, Saturday
    %w Día de la semana (numérico) 0 - domingo. 0, 1, 2, 3, 4, 5, 6
    %d Día del mes con el prefijo 0 (solo del 01 al 09, el resto es 10, 11, 12…). 01, 02, 03 … 10, 11, 12…
    %b Nombre del mes abreviado. Dec, Jan, Feb
    %m Mes del año (numérico) con el prefijo 0 hasta el mes 09. 01, 02, 03 … 10, 11, 12
    %B Nombre del mes entero. December, January, …
    %y Número del año abreviado a dos dígitos. 00, 01, 02, … 98, 99
    %Y Número del año completo. 2021, 2022, 2023 …
    %H Hora de 01 a 24. 01, 02, 03 … 23, 24
    %I Hora de 01 a 12. 01, 02, 03, … 10, 11, 12
    %p AM - PM AM, PM
    %M Minutos con el prefijo 0 del 00 al 09. 00, 01, 02, … 58, 59
    %S Segundos con el prefijo 0 del 00 al 09. 00, 01, 02, … 58, 59
    %f Microsegundos con ceros a la izquierda. 000000, 999999
    %z Compensación UTC en la forma HHMM o -HHMM (hay que utilizar un argumento especial para que aparezca: tzinfo=datetime.timezone.utc). +0000
    %Z Nombre de la zona horaria (hay que utilizar un argumento especial para que aparezca: tzinfo=datetime.timezone.utc). UTC
    %j Número del día del año con ceros a la izquierda. 001, 365
    %U Número de semana del año (empezando por el domingo). 00, 01, 02, … 51, 52 …
    %W Número de semana del año. 00, 01, 02, … 51, 52
    %c Representación larga de fecha y hora apropiada de la localidad. Sat Dec 24 09:26:53 2022
    %X Representación de hora apropiada de la localidad. 10:03:43

    El método strftime()

    Tenemos la siguiente fecha actual:

    from datetime import datetime
    
    fecha_actual = datetime.now()
    
    print(fecha_actual)
    Resultado en la consola
    2024-02-27 16:15:06.755516

    Si la queremos formatear de una forma más elegante, podemos hacer algo como esto:

    Tuesday, 27th February 2024

    Para conseguir este resultado puedes utilizar el método strftime(), para poder formatear los resultados que nos da el objeto de fecha.

    Espacio publicitario

    Este método te permite ir utilizando los diferentes códigos de formateo de la tabla anterior.

    Aquí tienes el ejemplo de como se haría para dejar la fecha igual que en la frase del ejemplo:

    from datetime import datetime
    
    fecha_actual = datetime.now()
    
    # Formatear la fecha
    fecha_formateada = fecha_actual.strftime("%A, %dth %B %Y")
    
    print(fecha_formateada)
    Resultado en la consola
    Tuesday, 27th February 2024

    Como puedes ver, simplemente tienes que crear como argumento del método, una cadena de caracteres que envuelva todos los códigos que desees. Todo se irá formateando automáticamente.

    Cambiar las fechas de Python a español

    Fechas en español con Python
    Fechas en español con Python

    Las fechas en inglés que vienen por defecto con Python, están muy bien, pero si estamos desarrollando algo en español, lo más normal sería que las fechas aparecieran formateadas en español. De modo, que pasemos a ver una forma de traducirlas.

    El módulo locale

    Lo primero es importar el módulo locale de Python:

    import locale

    ¿Para qué sirve el módulo locale?

    El módulo locale es un módulo que permite a las aplicaciones adaptar su comportamiento y presentación, a la configuración regional y de idioma del sistema. Esto incluye la representación de fechas, números, monedas, codificación de caracteres, etc.

    Espacio publicitario

    Probemos a establecer el idioma en español:

    import locale
    
    # Establece el idioma a español 
    locale.setlocale(locale.LC_ALL, "es")

    Esto mismo, lo puedes precisar más con el español de un país concreto, por ejemplo, si escribo una aplicación para España, le puedo poner esto:

    locale.setlocale(locale.LC_ALL, "es_ES")

    Para México esto:

    locale.setlocale(locale.LC_ALL, "es_MX")

    Lo mismo con cualquier otro país. Solo tienes que cambiar el código de país.

    La parte importante, para que esté en español, es el "es", en minúsculas.

    El ejemplo completo quedará así:

    import datetime
    import locale
    
    # Establece el idioma a español
    locale.setlocale(locale.LC_ALL, "es")
    
    # Crea un objeto datetime con la fecha y hora actual
    fecha_ahora = datetime.datetime.now()
    
    # Formateamos la fecha y hora
    fecha_formateada = fecha_ahora.strftime("%A, %d de %B de %Y a las %H:%M").capitalize()
    
    print(fecha_formateada)
    Resultado en la consola
    Martes, 27 de febrero de 2024 a las 16:24

    Primero cambiamos el idioma y luego, ya podemos formatear las fechas a nuestro gusto, ya que vendrán en español.

    Espacio publicitario




    Espacio publicitario


    Ejercicios de Python para resolver

    61. Crea un objeto de tipo fecha, e imprime la fecha actual en español. Qué aparezca formateada así:

    Hoy es día 27 de febrero de 2024. Son las 16 horas y 27 minutos.

    Recuerda que tiene que salirte tu fecha actual, no la que ves aquí escrita.

    Para resolver este ejercicio, tenías que utilizar la tabla de códigos de formateo para fechas y traducirla al español.

    Recuerda que se tiene que imprimir tu fecha actual, y no la que te muestro yo en esta salida de consola, de este ejemplo.

    import datetime
    import locale
    
    # Establecer el idioma a español
    locale.setlocale(locale.LC_ALL, "es")
    
    # Crear un objeto datetime con la fecha y hora actual
    fecha_ahora = datetime.datetime.now()
    
    # Formatear la fecha y hora actual según el formato deseado
    fecha_formateada = fecha_ahora.strftime("Hoy es día %d de %B de %Y. Son las %H horas y %M minutos.")
    
    print(fecha_formateada)
    Resultado en la consola
    Hoy es día 27 de febrero de 2024. Son las 16 horas y 27 minutos.

    62. Crea una clase llamada Usuario, que tenga los siguientes miembros:

    Atributos:

    • nombre
    • apellidos
    • fecha_ultimo_login

    Métodos:

    • leer_info(): muestra el nombre y apellidos del usuario.
    • ultimo_login(): simula hacer un login (inicio de sesión).

    ultimo_login(), no tendrá la lógica para iniciar sesión en ningún lado, simplemente mostrará esta frase, sustituyendo los valores entre llaves, por los valores de los atributos:

    El usuario {nombre} inició sesión por última vez a las {hora y fecha actuales}.

    Cuando tengas la clase hecha, crea un objeto cualquiera con el que probar los dos métodos.

    El ejercicio era libre en cuanto a presentación de los datos en la consola, excepto en el método ultimo_login(), que tenía que sacar la frase formateada tal y como se solicita en el enunciado.

    import datetime
    
    class Usuario:
        def __init__(self, nombre, apellidos):
            self.nombre = nombre
            self.apellidos = apellidos
            self.fecha_ultimo_login = datetime.datetime.now()
    
        def leer_info(self):
            print(f"Nombre: {self.nombre}")
            print(f"Apellidos: {self.apellidos}")
    
        def ultimo_login(self):
            self.fecha_ultimo_login = datetime.datetime.now()
            print(f"El usuario {self.nombre} inició sesión por última vez a las {self.fecha_ultimo_login}.")
    
    # Ejemplo de uso de la clase Usuario
    usuario1 = Usuario("Enrique", "Barros Fernández")
    usuario1.leer_info() 
    usuario1.ultimo_login()
    Resultado en la consola
    Nombre: Enrique
    Apellidos: Barros Fernández
    El usuario Enrique inició sesión por última vez a las 2024-02-27 16:34:13.814280.

    Cada vez que simules hacer el inicio de sesión llamando al método, verás que la fecha y hora del objeto, se actualiza al momento de ejecutar el método.

    Este programa, si estuviera conectado a una base de datos, para hacer un inicio de sesión real, se haría una actualización en la base de datos, guardando cada vez esta fecha y hora, dejando así un posible registro del último inicio de sesión, o incluso, un historial completo con todos los que ha ido realizando el usuario.



    Espacio publicitario