Abordaremos a continuación cómo tratar la gestión de fechas y horas en Python: creación de fechas, horas, lecturas de fechas y horas por teclado, y algunas operaciones básicas con fechas y horas. Todos los elementos que utilizaremos están disponibles en el módulo datetime
de Python, por lo que deberemos importarlo al inicio del programa:
import datetime
Para obtener fechas y horas tenemos distintas alternativas:
datetime.datetime.now()
para obtener la fecha y hora actualesdatetime.date.today()
para obtener sólo la fecha actual (sin la hora)datetime.datetime(año, mes, dia)
o bien datetime.datetime(año, mes, dia, hora, minuto, segundo)
para establecer una fecha (o fecha y hora) determinada.Aquí vemos algunos ejemplos:
import datetime
# Fecha y hora actuales
ahora = datetime.datetime.now()
ahora2 = datetime.date.today()
# 15 de julio de 2000, a las 16:14:32
fecha_pasada = datetime.datetime(2000, 7, 15, 16, 14, 32)
Una vez hemos construido una fecha con los elementos anteriores, podemos acceder a sus diferentes partes (hora, minuto, mes, etc) usando las distintas propiedades del objeto que hemos creado: day
, month
, year
, hour
, minute
, second
:
print(ahora.day)
print(ahora2.month)
print(fecha_pasada.minute)
El formato de la fecha/hora que utilicemos es importante, tanto para obtenerla de alguna fuente (por ejemplo, desde el teclado) como para mostrarlo por pantalla. Aquí podemos consultar las opciones del formato disponibles, que podemos emplear tanto para lectura como para escritura.
Para leer una fecha de teclado (o entrada de texto) usamos datetime.strptime
, indicando el texto del que leer la fecha, y el formato de fecha:
# Fecha que diga el usuario en formado dia/mes/año
texto = input("Escribe una fecha (d/m/a): ")
fecha_usuario = datetime.datetime.strptime(texto, '%d/%m/%Y')
Para escribir una fecha con un formato determinado, usamos datetime.strftime
sobre el objeto fecha, indicando el formato de salida:
# Fecha que diga el usuario en formado dia/mes/año
ahora = datetime.datetime.now()
print("Ahora: ", ahora.strftime('%d/%m/%Y %H:%M:%S'))
Por defecto, los resultados que obtenemos con el método strftime
son en inglés. Si queremos mostrar los resultados en español tenemos que especificarlo con la librería locale
. El siguiente ejemplo muestra cómo hacerlo:
import locale
locale.setlocale(locale.LC_TIME, "es_ES")
Una vez completado el paso anterior los resultados ya se muestran en español:
x = datetime(2015, 10, 24, 23, 30)
x = x.strftime("%A, %d de %B de %Y a las %I:%M %p")
print(x) #sábado, 24 de octubre de 2015 a las 11:30 PM
Algunas de las operaciones básicas que podemos hacer con fechas son:
total_seconds()
, y luego convertirlos a la unidad que queramos:fecha1 = ... # Creamos una fecha y hora
fecha2 = ... # Creamos otra fecha y hora
diferencia = fecha2 - fecha1
print("Horas de diferencia:", diferencia.total_seconds() // 3600)
datetime.timedelta
indicando la unidad a sumar/restar (días o unidades inferiores).ahora = datetime.datetime.now()
# Dentro de 10 días
futuro = ahora + datetime.timedelta(days = 10)
Ejercicio 1:
Escribe un programa que le pida al usuario su fecha de nacimiento y le diga:
- Cuántos años tiene
- Cuándo será la fecha de su próximo cumpleaños
- Cuántos días faltan para su próximo cumpleaños