es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Definición de días laborables y horas de trabajo en Python

Estoy buscando orientación sobre cómo crear una variable (Business_Time) que contenga solo días laborables (no fines de semana) y en la que pueda establecer el horario laboral (9 am – 6 pm GMT).

La razón de esto es porque estoy intentando calcular algunos SLA (tiempo que los empleados tienen para completar una tarea), sin embargo, si la hora de finalización cae fuera de estos días/horas laborables, entonces puedo establecerla en una hora específica.

Muchas gracias.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para crear una variable llamada Business_Time que contenga solo días laborables y horas laborales, puedes utilizar los módulos datetime y timedelta en Python. Primero, puedes crear una función que tome una fecha de inicio y una duración, y devuelva la fecha de finalización considerando solo los días laborables como días hábiles. Puedes utilizar el módulo timedelta para agregar días laborables a una fecha, omitiendo los fines de semana:

    import datetime as dt
    import timedelta as td
    
    def add_business_days(start_date, business_days):
        one_day = td(days=1)
        end_date = start_date
        while business_days > 0:
            end_date += one_day
            if end_date.weekday() < 5: # Verificar si es un día laborable
                business_days -= 1
        return end_date
    

    A continuación, puedes crear otra función que tome una fecha de inicio y una duración, y devuelva la fecha de finalización considerando solo las horas laborales. Puedes utilizar la función anterior para calcular la fecha de finalización para toda la duración, y luego ajustarla en función de las horas de trabajo:

    def add_business_hours(start_date, duration_hours):
        business_end = add_business_days(start_date, duration_hours // 8) # Supongamos 8 horas por día
        start_hour = dt.time(9) # Establecer hora de inicio
        end_hour = dt.time(18) # Establecer hora de finalización
        if business_end.time() > end_hour: # Si la hora de finalización es después de la hora de finalización
            business_end = business_end.replace(hour=end_hour.hour, minute=end_hour.minute)
        elif business_end.time() < start_hour: # Si la hora de finalización es antes de la hora de inicio
            next_business_day = add_business_days(business_end.date(), 1)
            business_end = dt.datetime.combine(next_business_day, start_hour)
        return business_end
    

    Finalmente, puedes utilizar la segunda función para calcular la hora de finalización del SLA en función de la hora de inicio y la duración:

    start_time = dt.datetime(2022, 1, 1, 9) # Hora de inicio de ejemplo
    duration_hours = 40 # Duración de ejemplo
    sla_end_time = add_business_hours(start_time, duration_hours)
    

    Esto te dará la hora de finalización del SLA considerando solo días y horas laborales, y ajustándola a las 6pm si cae fuera del horario laboral.

Comments are closed.