En este post veremos dos cosas para trabajar con la fecha y hora en Python:
- Cómo obtener la fecha y hora actual, separada por año, mes, día, hora, minuto, segundo y microsegundos
- Formatear la fecha y hora en Python para que sea legible y amigable.
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.
Pingback: Equivalente a STRFTIME de SQLite en MySQL - Parzibyte's blog