Dadas dos fechas, nuestra tarea es escribir un programa en Python para obtener el total de días hábiles, es decir, los días de semana entre las dos fechas.
Ejemplo:
Entrada: prueba_fecha1, prueba_fecha2 = fecha y hora (2015, 6, 3), fecha y hora (2015, 7, 1)
Salida : 20
Explicación: el total de días de la semana, es decir, los días hábiles tienen un lapso de 20.
Entrada: fecha_prueba1, fecha_prueba2 = fechahora(2015, 6, 3), fechahora(2016, 7, 1)
Salida : 282
Explicación: el total de días de la semana, es decir, los días hábiles tienen un lapso de 282.
Método 1: Usar timedelta() + sum() + día de la semana()
En esto, todas las fechas se extraen usando timedelta(), incrementando las diferencias hasta la fecha de finalización. Publique eso, los días hábiles se filtran usando el día de la semana(), sumando todo lo que tiene un valor inferior a 5, es decir, de lunes a viernes.
Python3
# Python3 code to demonstrate working of # Business days in range # Using timedelta() + sum() + weekday() from datetime import datetime, timedelta # initializing dates ranges test_date1, test_date2 = datetime(2015, 6, 3), datetime(2015, 7, 1) # printing dates print("The original range : " + str(test_date1) + " " + str(test_date2)) # generating dates dates = (test_date1 + timedelta(idx + 1) for idx in range((test_date2 - test_date1).days)) # summing all weekdays res = sum(1 for day in dates if day.weekday() < 5) # printing print("Total business days in range : " + str(res))
Producción:
The original range : 2015-06-03 00:00:00 2015-07-01 00:00:00 Total business days in range : 20
Método #2: Usar np.busday_count()
Esta es una función incorporada que se puede usar para emplear directamente para resolver esta tarea.
Python3
# Python3 code to demonstrate working of # Business days in range # Using np.busday_count from datetime import datetime, timedelta import numpy as np # initializing dates ranges test_date1, test_date2 = datetime(2015, 6, 3), datetime(2015, 7, 1) # printing dates print("The original range : " + str(test_date1) + " " + str(test_date2)) # generating total days using busday_count() res = np.busday_count(test_date1.strftime('%Y-%m-%d'), test_date2.strftime('%Y-%m-%d')) # printing print("Total business days in range : " + str(res))
Producción:
The original range : 2015-06-03 00:00:00 2015-07-01 00:00:00 Total business days in range : 20
Método #3: Usar pandas.bdate_range()
Esta es otra función incorporada que se puede usar para emplear directamente para resolver esta tarea. Devuelve la lista de fechas laborales totales, incluida la fecha de inicio y finalización.
Python3
# Python3 code to demonstrate working of # Business days in range # Using pd.bdate_range from datetime import datetime import pandas as pd # initializing dates ranges test_date1, test_date2 = datetime(2015, 6, 3), datetime(2015, 6, 30) # printing dates print("The original range : " + str(test_date1) + " " + str(test_date2)) # generating total days using pd.bdate_range() # len() gets the number of days # includes both last and first date. res = len(pd.bdate_range(test_date1.strftime('%Y-%m-%d'), test_date2.strftime('%Y-%m-%d'))) # printing result print("Total business days in range : " + str(res))
Producción :
The original range : 2015-06-03 00:00:00 2015-06-30 00:00:00 Total business days in range : 20
Publicación traducida automáticamente
Artículo escrito por manjeet_04 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA