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