Tabla de Contenidos
Python: Fechas
import datetime as dt # from datetime import datetime
Creación
Fecha actual:
d = dt.datetime.now() print(d) # Resultado # 2020-11-13 15:53:49.883446
Al imprimir un objeto de tipo datetime obtenemos año, mes, día, minutos, segundos y microsegundos.
Fecha:
d = dt.date(2020, 12, 31)
Utilizando el método strptime() (convierte un string a un objeto de fecha):
d = datetime.strptime("01/01/2020", "%Y-%m-%d")
Fecha y hora:
from datetime import datetime d = datetime(2020, 12, 31, 12, 59, 59)
Para poder ver la fecha como una cadena de caracteres:
str(d) # Resultado: # 2020-12-31 12:59:59
Otra forma de formatear una fecha es utilizando el método strftime(), que convertirá el objeto en un string:
fecha.strftime("%Y-%m-%d %H:%M:%S") # Resultado: # '2021-11-04 16:53:36'
Zona horaria
Los objetos DateTime en Python no tienen en cuenta la zona horaria debemos hacer que sean conscientes. Para ello nos ayudamos del módulo pytz:
from datetime import datetime import pytz # Listas las diferentes zonas horarias que tiene Pytz: for tz in pytz.all_timezones: print(tz) # Fecha y hora actual en la zona horaria actual now = datetime.now() print(now) # Resultado # 2020-11-13 17:16:04.477517 # Creamos una hora en UTC (aunque no tiene información sobre zona horaria) utcnow = datetime.utcnow() # Asignamos una zona horaria al objeto anterior utcnow = utcnow.replace(tzinfo=pytz.utc) print(utcnow) # Resultado # 2020-11-13 16:16:04.477517+00:00
Por regla general, se recomienda guardar las fechas en UTC y hacer posteriormente las conversiones a la zona horaria deseada
Para convertir zonas horarias:
madrid = utcnow.astimezone(pytz.timezone("Europe/Madrid")) print(madrid)
Extracción
import datetime as dt x = dt.datetime.now() print(x.year) # Extrae el año print(x.month) # Extrae el mes print(x.day) # Extrae el día print(x.hour) # Extrae la hora print(x.minute) # Extrae los minutos
Atributos
.year: extrae el año de una fecha..month: extrae el mes..day: extrae el día..hour: horas..minute: minutos..second: segundos.
d = dt.date(2020, 12, 31) d.year # 2020 d.month # 12 d.day # 31
Formatos
Para formatear la fecha, se puede utilizar el método strftime():
print(d.strftime("%A") # Nombre del día de la semana (en inglés)
| Directiva | Descripción | Ejemplo |
|---|---|---|
%a | Día de la semana (breve) | Wed |
%A | Día de la semana | Wednesday |
%Y | Año | 2019 |
%m | Número del mes (con cero inicial) | 03 |
%d | Día del mes (con cero inicial) | 09 |
%H | Hora (con cero inicial) | 02 |
%M | Minutos (con cero inicial) | 58 |
%S | Segundos (con cero inicial) | 59 |
%f | Microsegundos | 131488 |
%b | Nombre del mes (breve) | Dec |
%B | Nombre del mes | December |
%Z | Zona horaria | CST |
Comparación
Con objetos de tipo DateTime se pueden hacer comparaciones utilizando los operadores de comparación (<, >, ==…)
import datetime # date and time in yyyy/mm/dd hh:mm:ss format d1 = datetime.datetime(2020, 5, 13, 22, 50, 55) d2 = datetime.datetime(2020, 7, 13, 22, 50, 55) print(d1 < d2) # True print(d1 > d2) # False
Fecha
Si solo queremos comparar la fecha (año, mes y día):
import datetime # date and time in yyyy/mm/dd hh:mm:ss format d1 = datetime.datetime(2020, 5, 13, 22, 50, 55) d2 = datetime.datetime(2020, 7, 13, 22, 50, 55) print(d1.date() < d2.date()) # True print(d1.date() > d2.date()) # False
Tiempo
Para comparar solo el tiempo (horas, minutos, segundos…)
import datetime as dt # date and time in yyyy/mm/dd hh:mm:ss format d1 = dt.datetime(2020, 5, 13, 22, 50, 55) d2 = dt.datetime(2020, 5, 13, 7, 50, 55) d3 = dt.datetime(2020, 6, 13, 22, 50, 55) print(d1.time() == d2.time()) # False print(d1.time() == d3.time()) # True print(d1.time() < d2.time()) # False print(d1.time() < d3.time()) # False print(d1.time() > d2.time()) # True print(d1.time() > d3.time()) # False
Intervalos
Los objetos timedelta representan duraciones de tiempo, lo cual permite realizar operaciones aritméticas con las fechas.
from datetime import timedelta nuevo_dia = cualquier_dia + timedelta(days=1) # añade un día a ''cualquier_dia''
Podríamos hacer comparaciones:
cualquier_dia > nuevo_dia # Resultado: # False
Tiempos
time.time() representa una hora en el día, independientemente del día del que se trate.
Un uso típico es ver la duración de la ejecución de un programa.
from time import time t0 = time() for x in range(100000): a = x t1 = time() t1 - t0 # Resultado: # 0.007186412811279297
