Saltar al contenido

Generador de rango de fechas de Python durante días hábiles

Te recomendamos que pruebes esta solución en un ambiente controlado antes de pasarlo a producción, un saludo.

Solución:

Recomendaría encarecidamente usar la biblioteca dateutil para tales tareas. Un basico (no ignorando las vacaciones) iterador durante los días hábiles, entonces simplemente es:

from dateutil.rrule import DAILY, rrule, MO, TU, WE, TH, FR

def daterange(start_date, end_date):
  return rrule(DAILY, dtstart=start_date, until=end_date, byweekday=(MO,TU,WE,TH,FR))

Asumiendo startDate y endDate son objetos de fecha y hora, puede usar el weekday método para obtener el día de la semana, luego omítalo si es sábado o domingo. Solo haz:

def daterange(startDate, endDate):
    for i in xrange(int((endDate - startDate).days)):
        nextDate = startDate + timedelta(i)
        if nextDate.weekday() not in (5, 6):
            yield startDate + timedelta(i)

Para las vacaciones, tendrá que comprobar manualmente las vacaciones que desee. Algunas vacaciones se definen de manera compleja, por lo que esto podría ser un poco complicado.

Hay una biblioteca útil llamada dateutil que puede hacer este tipo de cosas por ti. Puede generar rangos de fechas (o fechas basadas en reglas personalizadas), excluyendo ciertos días, considerar una semana que comienza en un día, etc. También tiene un timedelta algo más flexible que la biblioteca de fecha y hora incorporada.

Docs en http://labix.org/python-dateutil/ – y disponible en PyPi

Comentarios y valoraciones del post

Si te ha resultado útil nuestro post, nos gustaría que lo compartas con otros juniors y nos ayudes a dar difusión a este contenido.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

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