Formatear y obtener fecha y hora actual en Python 3

Obtener y formatear fecha y hora actual en Python

En este post veremos dos cosas para trabajar con la fecha y hora en Python:

  1. Cómo obtener la fecha y hora actual, separada por año, mes, día, hora, minuto, segundo y microsegundos
  2. Formatear la fecha y hora en Python para que sea legible y amigable.
Formatear y obtener fecha y hora actual en Python 3
Formatear y obtener fecha y hora actual en Python 3

Veremos algunos formatos útiles, como “Miércoles, 19 de diciembre del 2018” o “2018/12/19“, también con la hora, por ejemplo “Miércoles, 19 de diciembre del 2018. 7:30 AM” o incluso únicamente la hora, por ejemplo, “11:30 PM” o “23:10:15

Requisitos previos

Se necesita tener instalado Python 3 y PIP.

Obtener fecha y hora actual en Python

Primero se debe importar el objeto datetime del módulo datetime, así:

from datetime import datetime

Después, con datetime podemos llamar a now(), lo cual devuelve un objeto que tiene todas las propiedades que necesitamos para analizar la fecha actual.

"""
	Fecha y hora actual en Python
	@author parzibyte
"""
from datetime import datetime
ahora = datetime.now()
print("Justo ahora es:", ahora)
anio = ahora.year
print("El año es: ", anio)
mes = ahora.month
print("El mes es: ", mes)
dia = ahora.day
print("El día es: ", dia)
hora = ahora.hour
print("La hora es: ", hora)
minutos = ahora.minute
print("Los minutos son: ", minutos)
segundos = ahora.second
print("Los segundos son: ", segundos)
microsegundos = ahora.microsecond
print("Los microsegundos son: ", microsegundos)
"""
Salida (al menos al ejecutar el script):
Justo ahora es: 2018-12-19 22:45:45.694347
El año es:  2018
El mes es:  12
El día es:  19
La hora es:  22
Los minutos son:  45
Los segundos son:  45
Los microsegundos son:  694347
"""

Con ese objeto ya podemos crear todo tipo de formatos de fechas. A partir del mes saber su nombre, a partir de la hora saber si es AM o PM, etcétera.

Para ello, tendríamos que concatenar. Por dar un ejemplo:

fecha = "{}-{}-{}".format(ahora.year, ahora.month, ahora.day)

Aunque eso sería un poco engorroso y complicado en casos más grandes, así que, ¿por qué reinventar la rueda, si el lenguaje ya provee una forma de formatear fechas y horas?

Formatear fecha y hora en Python con strftime

Para formatear una fecha y hora en Python, la cual es obtenida con la función now, podemos llamar a strftime. Este método recibe el formato que deseamos, y devuelve la fecha formateada. Obtenemos la fecha y hora actual:

ahora = datetime.now()

Y luego formateamos, en este caso con algo como 2018-12-19:

print("Algo como 2018-12-19 => ", ahora.strftime("%Y-%m-%d"))

Llamamos al método strftime y le pasamos formateadores, el de %Y simboliza el año de 4 dígitos, el %m como mes y el %d el día.

¿De dónde salen estos formatos? de esta lista oficial.

Vamos a ver algunos casos comunes que seguramente a más de uno le servirán, pero por eso dejo ahí la lista de formateadores en caso de que las necesidades sean distintas.

Obtener la fecha y hora con nombre del día y nombre del mes

Como lo dije al inicio, se verá cómo obtener el nombre del día y el nombre del mes. Algo que imprimirá algo parecido a lo siguiente:

Miércoles, 19 de Diciembre del 2018

Aquí el código:

"""
	Formatear fecha actual de modo que su formato quede como:
	"Miércoles, 19 de Diciembre del 2018"
	@author parzibyte
"""
from datetime import datetime

#Diccionarios de días y meses
meses = {
    1: "Enero",
    2: "Febrero",
    3: "Marzo",
    4: "Abril",
    5: "Mayo",
    6: "Junio",
    7: "Julio",
    8: "Agosto",
    9: "Septiembre",
    10: "Octubre",
    11: "Noviembre",
    12: "Diciembre",
}

dias = {
    0: "Domingo",
    1: "Lunes",
    2: "Martes",
    3: "Miércoles",
    4: "Jueves",
    5: "Viernes",
    6: "Sábado",
}

ahora = datetime.now()
numero_mes = ahora.month
# A entero para quitar los ceros a la izquierda en caso de que existan
numero_dia = int(ahora.strftime("%w"))
# Leer diccionario
dia = dias.get(numero_dia)
mes = meses.get(numero_mes)
# Formatear
fecha = "{}, {} de {} del {}".format(dia, ahora.day, mes, ahora.year)
#Imprimir
print(fecha)
# Miércoles, 19 de Diciembre del 2018

Utilizamos un diccionario y el método get del mismo para obtener el valor a partir del número de mes o día, luego simplemente formateamos una cadena.

Año, mes y día con hora completa

Otro formato útil es el que tiene la forma de “2018-12-19 20:15:22”. Esto es más fácil que el ejemplo anterior:

"""
	Formatear fecha actual de modo que su formato quede como:
	"2018-19-12 18:08:50"

	@author parzibyte
"""
from datetime import datetime
ahora = datetime.now()
fecha = ahora.strftime("%Y-%m-%d %H:%M:%S")
#Imprimir
print(fecha)
# 2018-12-20 00:10:34

Lo único que se hace es aprovechar la función y los símbolos de formato que existen.

La hora en formato de 24 horas

Siguiendo con los formatos de fechas, veamos cómo obtener la hora en formato de 24 horas; esto es que, por ejemplo, a las 3 de la tarde sean a las 15 horas. El código es este:

"""
	Hora actual en formato de 24 horas

	@author parzibyte
"""
from datetime import datetime

ahora = datetime.now()

fecha = ahora.strftime("%H:%S:%M")
#Imprimir
print(fecha)
# 00:48:18

Hora actual con AM o PM

Para terminar y mostrar AM o PM en la hora actual, con formato de 12 horas, se usa el modificador %p para el momento del día, así como el modificador %I en lugar del %H para la hora.

El código de ejemplo queda así:

"""
	Hora actual en formato de 12 horas,
	con AM y PM

	@author parzibyte
"""
from datetime import datetime

ahora = datetime.now()

fecha = ahora.strftime("%I:%S:%M %p")
#Imprimir
print(fecha)
# 03:31:33 AM

Conclusión

Así de fácil es formatear fechas y horas en Python. Recuerda que siempre puedes comentar si tienes dudas.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

1 comentario en “Obtener y formatear fecha y hora actual en Python”

  1. Pingback: Equivalente a STRFTIME de SQLite en MySQL - Parzibyte's blog

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *