16 La librería Datetime
Para manejar fechas en Python se suele utilizar la librería datetime que incorpora los tipos de datos date, time y datetime para representar fechas y funciones para manejarlas. Algunas de las operaciones más habituales que permite son:
- Acceder a los distintos componentes de una fecha (año, mes, día, hora, minutos, segundos y microsegundos).
- Convertir cadenas con formato de fecha en los tipos
date,timeodatetime. - Convertir fechas de los tipos
date,timeodatetimeen cadenas formateadas de acuerdo a diferentes formatos de fechas. - Hacer aritmética de fechas (sumar o restar fechas).
- Comparar fechas.
16.1 Los tipos de datos date, time y datetime
date(año, mes, dia): Devuelve un objeto de tipodateque representa la fecha con elaño,mesydiaindicados.time(hora, minutos, segundos, microsegundos): Devuelve un objeto de tipotimeque representa un tiempo lahora,minutos,segundosymicrosegundosindicados.datetime(año, mes, dia, hora, minutos, segundos, microsegundos): Devuelve un objeto de tipodatetimeque representa una fecha y hora con elaño,mes,dia,hora,minutos,segundosymicrosegundosindicados.
from datetime import date, time, datetime
>>> date(2020, 12, 25)
datetime.date(2020, 12, 25)
>>> time(13,30,5)
datetime.time(13, 30, 5)
>>> datetime(2020, 12, 25, 13, 30, 5)
datetime.datetime(2020, 12, 25, 13, 30, 5)
>>> print(datetime(2020, 12, 25, 13, 30, 5))
2020-12-25 13:30:0516.2 Acceso a los componentes de una fecha
date.today(): Devuelve un objeto del tipodatela fecha del sistema en el momento en el que se ejecuta.datetime.now(): Devuelve un objeto del tipodatetimecon la fecha y la hora del sistema en el momento exacto en el que se ejecuta.d.year: Devuelve el año de la fechad, puede ser del tipodateodatetime.d.month: Devuelve el mes de la fechad, que puede ser del tipodateodatetime.d.day: Devuelve el día de la fechad, que puede ser del tipodateodatetime.d.weekday(): Devuelve el día de la semana de la fechad, que puede serpuede ser del tipodateodatetime.t.hour: Devuelve las horas del tiempot, que puede ser del tipotimeodatetime.t.hour: Devuelve los minutos del tiempot, que puede ser del tipotimeodatetime.t.second: Devuelve los segundos del tiempot, que puede ser del tipotimeodatetime.t.microsecond: Devuelve los microsegundos del tiempot, que puede ser del tipotimeodatetime.
>>> from datetime import date, time, datetime
>>> print(date.today())
2020-04-11
>>> dt = datetime.now()
>>> dt.year
2020
>>> dt.month
4
>>> dt.day
11
>>> dt.hour
22
>>> dt.minute
5
>>> dt.second
45
>>> dt.microsecond
133816.3 Conversión de fechas en cadenas con diferentes formatos
d.strftime(formato): Devuelve la cadena que resulta de transformar la fechadcon el formato indicado en la cadenaformato. La cadenaformatopuede contener los siguientes marcadores de posición:%Y(año completo),%y(últimos dos dígitos del año),%m(mes en número),%B(mes en palabra),%d(día),%A(día de la semana),%a(día de la semana abrevidado),%H(hora en formato 24 horas),%I(hora en formato 12 horas),%M(minutos),%S(segundos),%p(AM o PM),%C(fecha y hora completas),%x(fecha completa),%X(hora completa).
>>> from datetime import date, time, datetime
>>> d = datetime.now()
>>> print(d.strftime('%d-%m-%Y'))
13-04-2020
>>> print(d.strftime('%A, %d %B, %y'))
Monday, 13 April, 20
>>> print(d.strftime('%H:%M:%S'))
20:55:53
>>> print(d.strftime('%H horas, %M minutos y %S segundos'))
20 horas, 55 minutos y 53 segundos16.4 Conversión de cadenas en fechas
strptime(s, formato): Devuelve el objeto de tipodate,timeodatetimeque resulta de convertir la cadenasde acuerdo al formato indicado en la cadenaformato. La cadenaformatopuede contener los siguientes marcadores de posición:%Y(año completo),%y(últimos dos dígitos del año),%m(mes en número),%B(mes en palabra),%d(día),%A(día de la semana),%a(día de la semana abrevidado),%H(hora en formato 24 horas),%I(hora en formato 12 horas),%M(minutos),%S(segundos),%p(AM o PM),%C(fecha y hora completas),%x(fecha completa),%X(hora completa).
>>> from datetime import date, time, datetime
>>> datetime.strptime('15/4/2020', '%d/%m/%Y')
datetime.datetime(2020, 4, 15, 0, 0)
>>> datetime.strptime('2020-4-15 20:50:30', '%Y-%m-%d %H:%M:%S')
datetime.datetime(2020, 4, 15, 20, 50, 30)16.5 Aritmética de fechas
Para representar el tiempo transcurrido entre dos fechas se utiliza el tipo timedelta.
timedelta(dias, segundos, microsegundos): Devuelve un objeto del tipotimedeltaque representa un intervalo de tiempo con losdias,segundosymicorsegundosindicados.d1 - d2: Devuelve un objeto del tipotimedeltaque representa el tiempo transcurrido entre las fechasd1yd2del tipodatetime.d + delta: Devuelve la fecha del tipodatetimeque resulta de sumar a la fechadel intervalo de tiempodelta, dondedeltaes del tipotimedelta.
>>> from datetime import date, time, datetime, timedelta
>>> d1 = datetime(2020, 1, 1)
>>> d1 + timedelta(31, 3600)
datetime.datetime(2020, 2, 1, 1, 0)
>>> datetime.now() - d1
datetime.timedelta(days=132, seconds=1826, microseconds=895590)