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.

Diferencia horaria en un año específico en Python.

Tengo un rango de tiempo como este:

runtime_start = datetime.date(2021,1,1)
runtime_end = datetime.date(2022,3,1)
current_year = datetime.date.today().year

¿Cómo puedo calcular el número de meses en el current_year?

Algunos ejemplos:

runtime_start = 2021,1,1 | runtime_end = 2022,3,1 | current_year = 2021 | output = 12


runtime_start = 2021,1,1 | runtime_end = 2021,6,1 | current_year = 2021 | output= 5

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para calcular el número de meses en el año actual, primero debemos verificar si runtime_start y runtime_end caen dentro del año actual. Podemos hacer esto verificando si runtime_start.year es igual a runtime_end.year y si ese año es igual a current_year. Si se cumple esta condición, podemos calcular el número de meses entre runtime_start y runtime_end utilizando la función timedelta y luego extraer el número de meses de la duración resultante. Si la condición no se cumple, entonces el rango de tiempo abarca varios años y necesitamos iterar sobre cada año, calcular el número de meses para cada año dentro del rango y luego sumarlos.

    Aquí está el código Python que implementa la lógica mencionada anteriormente:

    def get_num_months(runtime_start, runtime_end, current_year):
        if runtime_start.year == runtime_end.year == current_year:
            num_months = (runtime_end.month - runtime_start.month) + 1
        else:
            num_months = 0
            for year in range(runtime_start.year, runtime_end.year + 1):
                if year == current_year:
                    if year == runtime_start.year:
                        start_month = runtime_start.month
                    else:
                        start_month = 1
                    if year == runtime_end.year:
                        end_month = runtime_end.month
                    else:
                        end_month = 12
                    num_months += (end_month - start_month) + 1
                elif runtime_start.year <= year <= runtime_end.year:
                    num_months += 12
        return num_months
    

    La función get_num_months recibe tres argumentos – runtime_start, runtime_end y current_year – y devuelve el número de meses que caen dentro del año actual.

    Probemos la función utilizando los ejemplos proporcionados en la pregunta:

    runtime_start = datetime.date(2021,1,1)
    runtime_end = datetime.date(2022,3,1)
    current_year = datetime.date.today().year
    
    print(get_num_months(runtime_start, runtime_end, current_year)) # Output: 12
    
    runtime_start = datetime.date(2021,1,1)
    runtime_end = datetime.date(2021,6,1)
    current_year = datetime.date.today().year
    
    print(get_num_months(runtime_start, runtime_end, current_year)) # Output: 5
    

    Como podemos ver, la función produce la salida esperada para ambos ejemplos.

Comments are closed.