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.

Cómo obtener el número de días laborables que han transcurrido desde el epoch?

Con un código tan simple como se muestra a continuación, puedes obtener el número de días que han pasado desde la época.

from time import time
secs = time()
day = 24 * 60 * 60
days = int(secs // day)
print(days)

Pero ahora necesito evitar que todos los sábados y domingos se incluyan en el conteo. El primer paso sería obtener el número de semanas completas que han pasado y multiplicarlo por 5.

from time import time
secs = time()
week = 7 * 24 * 60 * 60
weekDays = int(secs // week)
weekDays *= 5
print(weekDays)

Pero no sé qué hacer a continuación. Ten en cuenta que la tarea es encontrar el número de días de semana COMPLETOS que han pasado, por lo que en el día de la semana 1000, la respuesta debería ser 999.

Además, si la respuesta en un viernes dado es 2000, entonces debería aumentar a 2001 el sábado porque ahora tenemos un viernes completo adicional que ha pasado. La respuesta luego debe mantenerse igual el domingo y el lunes, pero aumentar a 2002 el martes porque ahora tenemos un día lunes completo adicional que ha pasado.

Verifiqué y el día 1 de enero de 1970 (fecha de la época) fue jueves, así que supongo que eso debe tenerse en cuenta.

Espero poder explicar mi problema de manera clara y completa. Si no es así, por favor pregunte en los comentarios. Espero sus respuestas. Gracias de antemano.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para llevar a cabo esta tarea, necesitamos calcular el número de días laborables que han transcurrido excluyendo los sábados y domingos. Sabemos que la fecha de inicio fue un jueves, por lo que podemos utilizar esto para calcular el número de días transcurridos desde el último jueves. Podemos empezar calculando el número de semanas completas que han pasado desde el inicio y luego sumar el número de días transcurridos desde el último jueves. Aquí tienes un código en Python que resuelve este problema:

    import datetime
    from time import time
    
    # obtener la hora actual en segundos
    secs = time()
    
    # obtener la fecha de inicio como un objeto datetime
    inicio = datetime.datetime.utcfromtimestamp(0)
    
    # calcular el número de semanas completas que han pasado desde el inicio
    semana = 7 * 24 * 60 * 60
    semanas = int(secs // semana)
    
    # calcular el número de días transcurridos desde el último jueves
    # sabemos que el 1 de enero de 1970 fue un jueves
    dias_desde_jueves = (datetime.datetime.utcfromtimestamp(secs).weekday() - 3) % 7
    
    # calcular el total de días laborables que han pasado
    dias_laborables = semanas * 5 + min(5, dias_desde_jueves)
    
    # imprimir el resultado
    print(dias_laborables)
    

    Este código utiliza el módulo datetime para calcular el número de días desde el último jueves. La función datetime.datetime.utcfromtimestamp(secs) devuelve un objeto datetime que representa la hora actual en UTC. Luego podemos llamar al método weekday() para obtener el día de la semana como un número entero (0 para lunes, 1 para martes, etc.). Restamos 3 (porque jueves es el día 3) y tomamos el resultado módulo 7 para obtener el número de días desde el último jueves.

    Luego añadimos el número de semanas completas que han pasado multiplicado por 5 (para excluir los sábados y domingos) y añadimos min(5, dias_desde_jueves) para tener en cuenta los días laborables que han pasado desde el último jueves.

    Este código debería dar el resultado correcto para cualquier fecha posterior al inicio (1 de enero de 1970).

Comments are closed.