====== 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