Programa de Python para obtener el total de días hábiles entre dos fechas

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *