Ejemplo n.º 1
0
def R3(dia_siguiente):
    anio = dia_siguiente[0]
    mes = dia_siguiente[1]
    dia = dia_siguiente[2]
    dias_meses = [
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    ]  #Los días que posee cada mes en orden de izquierda a derecha
    if (requerimiento_0.R0(dia_siguiente)):  #Validar la tupla ingresada
        if (requerimiento_2.R2(dia_siguiente)
            ):  # Se valida que sea una fecha válida
            if (
                    requerimiento_1.R1(anio)
            ):  #Si es año bisiesto se cambia la cantidad de días de Febrero en la lista
                dias_meses[1] += 1
            if (dia != dias_meses[mes - 1]):
                return (anio, mes, dia + 1)  #Si el día no es el último del mes
            else:
                if (mes == 12):
                    return (anio + 1, 1, 1
                            )  #Si es el último día del mes de diciembre
                else:
                    return (
                        anio, mes + 1, 1
                    )  #Si es el último día del mes que no sea Febrero ni Diciembre
        else:
            return "No es una fecha válida"
    else:
        return "No es una fecha válida"
Ejemplo n.º 2
0
def R6(imprimir_3x4):
    meses_dict = {  # Diccionario con los meses y la cantidad dias respectivamente
        "Enero": 31,
        "Febrero": 28,
        "Marzo": 31,
        "Abril": 30,
        "Mayo": 31,
        "Junio": 30,
        "Julio": 31,
        "Agosto": 31,
        "Septiembre": 30,
        "Octubre": 31,
        "Noviembre": 30,
        "Diciembre": 31
    }

    dias = ("D", "L", "K", "M", "J", "V", "S")
    print("Calendario del año " + str(imprimir_3x4) + " D.C")
    lista_meses = []
    item_mes = []
    dia_inicial = requerimiento_5.R5(
        imprimir_3x4)  # Obtener el dia en el que empieza el dia de enero
    if (type(dia_inicial)
            is not int):  # Validar el tipo de dato del año ingresado
        return "Año inválido"
    if (
            requerimiento_1.R1(imprimir_3x4)
    ):  # Verificar si el año ingresado es bisiesto. Si es, se añade +1 dia al mes de febrero
        meses_dict["Febrero"] = meses_dict.get("Febrero") + 1
    for _mes, cant_dias in meses_dict.items(
    ):  # Iterar sobre el diccionario de meses y sus cantidades de dias respectivos
        lista_temp = []
        for _dia in dias:  # Ingresar los dias de la semana en cada mes
            lista_temp.append(_dia)
        item_mes.append(lista_temp)
        temp_ceros = dia_inicial
        lista_temp = []
        while temp_ceros != 0:  # Anadir espacios vacios acorde al dia inicial del mes
            lista_temp.append(" ")
            temp_ceros -= 1
        for _dia in range(1, cant_dias +
                          1):  # Recorrer los dias segun la cantidad respectiva
            lista_temp.append(_dia)
            dia_inicial += 1
            if (
                    dia_inicial == 7
            ):  # Si es el dia final de la semana, insertar lista con la cantidad de 7 dias, luego se inicia en []
                item_mes.append(lista_temp)
                lista_temp = []
                dia_inicial = 0
        temp_ceros = dia_inicial
        while temp_ceros != 7:  # Ingresar ceros en la matriz acorde al dia de inicio
            lista_temp.append(" ")
            temp_ceros += 1
        item_mes.append(lista_temp)
        if (len(item_mes) != 7):  # Para que todos los meses sean de tamaño 7.
            item_mes.append([" ", " ", " ", " ", " ", " ", " "])
        lista_meses.append(item_mes)
        item_mes = []
    imprimir_R6(lista_meses, imprimir_3x4)
def dia_inicio_mes(año, mes):
    if (isinstance(año, int) and isinstance(
            mes, int)):  #Se valida que las entradas sean números enteros
        if (
                año > 1582
        ):  #Se valida que el año pertenezca al calendario Gregoriano(año>1582)
            if (
                    mes > 0 and mes < 13
            ):  #Se valida que el mes pertenezca al rango válido (1≤ mes ≤12)
                retorno = requerimiento_5.calcularDoomsday(
                    (año, mes, 1)
                )  #Se calcula el primer día del mes en el año indicado y se almacena en una variable a ser retornada
                if (requerimiento_1.R1(año) and mes
                        == 2):  #Si es año bisiesto se resta uno al resultado
                    if retorno == 0:  #Si es año bisiesto y "retorno=0" retorna el 6 para indicar que es sábado
                        return 6
                    else:  #Si es año bisiesto y "retorno!=0" se resta 1 a la variable "retorno"
                        retorno -= 1
                return retorno
            else:
                return "El mes ingresado debe pertenecer al rango válido (1≤ mes ≤12)"
        else:
            return "El año no pertenece al claendario Gregoriano. Debe ser mayor a 1582"
    else:
        return "Los datos ingresados deben ser números enteros"
def calcularDoomsday(fecha):
    TablaMeses = [0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3,
                  5]  #Valores según cada mes necesarios para la fórmula
    TablaSiglos = [6, 4, 2,
                   0]  #Valores según cada siglo necesarios para la fórmula
    PrimeraTabla = [0, 3, 4, 0, 1, 4, 5, 0, 2,
                    5]  #Valores necesarios para la fórmula
    SegundaTabla = [0, 1, 2, 3, 5, 6, 0, 1, 3, 4, 5,
                    6]  #Valores necesarios para la fórmula
    siglo = fecha[0] // 100
    PrimerDigitoAnio = (
        fecha[0] % 100 -
        fecha[0] % 10) // 10  #Primer digito del año sin contar los primeros 2
    SegundoDigitoAnio = (fecha[0] % 10
                         )  #Segundo dígito del año sin contar los primeros 2
    if (fecha[1] == 1 or fecha[1] == 2):
        if (requerimiento_1.R1(
                fecha[0])):  #Si es año bisiesto se utiliza un -1 en la fórmula
            TablaMeses[0] -= 1
    if (esPar(PrimerDigitoAnio) == False
        ):  #Si PrimerDigitoAnio es impar, se suma 2 al SegundoDigitoAnio
        SegundoDigitoAnio += 2
    return (fecha[2] + TablaMeses[fecha[1] - 1] +
            (TablaSiglos[siglo % 4]) + PrimeraTabla[PrimerDigitoAnio] +
            SegundaTabla[SegundoDigitoAnio]) % 7  #Formula utilizada
def R2(fecha_es_valida):  # Se asume el formato: (año, mes, día)
    meses_dict = {  # Diccionario con los meses y la cantidad dias respectivamente
        "enero": 31,
        "febrero": 28,
        "marzo": 31,
        "abril": 30,
        "mayo": 31,
        "junio": 30,
        "julio": 31,
        "agosto": 31,
        "septiembre": 30,
        "octubre": 31,
        "noviembre": 30,
        "diciembre": 31
    }

    anio = fecha_es_valida[
        0]  # Asignacion de los valores de la tupla en variables
    mes = fecha_es_valida[1]
    dia = fecha_es_valida[2]

    if (requerimiento_1.R1(anio)
        ):  # Comprobar si el año es bisiesto, si sucede
        meses_dict["febrero"] = meses_dict.get(
            "febrero") + 1  # .. se suma +1 dia al mes de febrero

    if ((mes < 1)
            or (mes > 12)):  # Verificar que el mes ingresado esté entre 1 y 12
        return False

    if ((dia < 1) or (dia > list(meses_dict.values())[mes - 1])
        ):  # Verificar que los dias ingresados sean acorde al mes,
        return False  # .. se pasa el diccionario de meses en forma lista conteniendo
        # .. los valores (cantidad de días), luego se obtiene por medio
    return True  # .. de un indice el valor respectivo acorde al mes ingresado
Ejemplo n.º 6
0
def dias_entre(f1, f2):
    if ((requerimiento_0.R0(f1) == True)
            and (requerimiento_0.R0(f2)
                 == True)):  # verificar el formato de las fechas
        if (
            (requerimiento_2.R2(f1) == True)
                and (requerimiento_2.R2(f2) == True)
        ):  # se comprueba de acuerdo al calendario gregoriano, el mes y los dias respectivos
            if (f1EsFechaMenor(f1, f2) !=
                    True):  # si f1 no es menor, pasa a ser la menor
                temp = f2
                f2 = f1
                f1 = temp

            dias_meses = [
                31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
            ]  # días de cada mes, en orden de izquierda a derecha
            diasTranscurridos = 0
            nuevoF1 = list(
                f1)  # convertir las tuplas en listas para editar valores
            nuevoF2 = list(f2)
            banderaBisiesto = False  # validar el incremento del mes febrero en los años bisiestos cada 4 años

            while (sonFechasIguales(nuevoF1, nuevoF2) !=
                   True):  # la idea es hacer f1 la misma fecha que f2
                if ((nuevoF1[2] - 1) == dias_meses[nuevoF1[1] - 1]
                    ):  # si estoy en el ultimo dia - 1 del mes
                    nuevoF1[2] = 1  # el dia inicia en 1

                    if (nuevoF1[1] <
                            12):  # si no estoy en el numero de mes maximo
                        nuevoF1[1] += 1  # se incrementa el mes en 1
                    else:
                        nuevoF1[1] = 1  # pero si estoy en el mes 12
                        nuevoF1[0] += 1  # el mes empezará en 1

                        if (
                                requerimiento_1.R1(nuevoF1[0]) == True
                        ):  # si es año bisiesto se suma 1 al mes de febrero
                            dias_meses[1] += 1
                            banderaBisiesto = True  # el año siguiente disminuye 1 dia a febrero.
                        elif (
                                banderaBisiesto != False
                        ):  # *Solo entra al condicional cuando un año atras hubo un bisiesto
                            dias_meses[1] -= 1
                            banderaBisiesto = False
                nuevoF1[2] += 1  # se incrementa el dia en + 1
                diasTranscurridos += 1  # cuenta global de los dias transcurridos
            return diasTranscurridos
        else:
            print(
                "Alguna fecha presenta valores incorrectos de acuerdo al calendario gregoriano"
            )
    else:
        print("Alguna fecha presenta un error de formato")
Ejemplo n.º 7
0
def dia_semana(fecha):
    if (
            fecha[0] > 1582
    ):  #Se verifica que el año pertenezca al calendario Gregoriano(año>1582)
        if (requerimiento_2.R2(fecha)):  #Se verifica que sea un fecha válida
            retorno = requerimiento_5.calcularDoomsday(
                fecha
            )  #Se calcula el día de la semana que es la fecha ingresada
            if (requerimiento_1.R1(fecha[0])
                    and fecha[1] == 2):  #Se verifica si el año es bisiesto
                if retorno == 0:  #Si es año bisiesto y "retorno=0" retorna el 6 para indicar que es sábado
                    return 6
                else:  #Si es año bisiesto y "retorno!=0" se resta 1 a la variable "retorno"
                    retorno -= 1
            return retorno
        else:
            return "La fecha ingresada no es válida"
    else:
        return "El año no pertenece al claendario Gregoriano. Debe ser mayor a 1582"
def fecha_futura(tupla, dias):  # Se asume el formato: (año, mes, día)
    dias_meses = [
        31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    ]  #Los días que posee cada mes en orden de izquierda a derecha
    anioTupla = tupla[0]
    mesTupla = tupla[1]
    diaTupla = tupla[2]
    if (requerimiento_0.R0(tupla)):  #Validar la tupla ingresada
        if (requerimiento_2.R2(tupla)):  # Se valida que sea una fecha válida
            if ((type(dias) is int) and
                    dias > 0):  # Validar que sea un número natural positivo
                if (
                        requerimiento_1.R1(anioTupla)
                ):  #Si es año bisiesto se cambia la cantidad de días de Febrero en la lista
                    dias_meses[1] += 1
                if (diaTupla <= dias_meses[mesTupla - 1] - dias):
                    return (anioTupla, mesTupla, diaTupla + dias
                            )  #Si el día no es el último del mes
                else:
                    diaNuevo = diaTupla + dias  #Dia incrementado para la nueva fecha
                    indiceMes = mesTupla - 1  # Mes actual
                    anioNuevo = anioTupla  # Año actual
                    while (diaNuevo > dias_meses[indiceMes]):
                        diaNuevo -= dias_meses[
                            indiceMes]  # Restar los días de cada mes
                        indiceMes += 1
                        if (indiceMes == 12):
                            indiceMes = 0
                            anioNuevo += 1
                    if (mesTupla == 12):
                        return (anioNuevo, indiceMes + 1, diaNuevo
                                )  #Si es el último día del mes de diciembre
                    else:
                        return (
                            anioNuevo, indiceMes + 1, diaNuevo
                        )  #Si es el último día del mes que no sea Febrero ni Diciembre
            else:
                return "La cantidad de días debe ser un número natural positivo"
        else:
            return "No es una fecha válida"
    else:
        return "No es una fecha válida"
Ejemplo n.º 9
0
def R4(dias_desde_primero_enero):
    if ((requerimiento_0.R0(dias_desde_primero_enero)) and (requerimiento_2.R2(dias_desde_primero_enero))):
        anio = dias_desde_primero_enero[0]
        mes = dias_desde_primero_enero[1]
        dia = dias_desde_primero_enero[2]
        dias_meses = [31,28,31,30,31,30,31,31,30,31,30,31] #Los dias que posee cada mes en orden de izquierda a derecha

        cantidad_dias = 0
        
        for i in range(mes- 1): #Sumar todos los dias desde enero hasta mes anterior
            cantidad_dias += dias_meses[i]
            i += 1
            
        cantidad_dias += dia - 1 #Sumarle la cantidad de dias que han pasado completamente en el mes actual
        
        if(2 < mes and requerimiento_1.R1(anio)): #Si es anio bisiesto y mes mayor a febrero
            cantidad_dias += 1
        
        print(cantidad_dias)
        
    else:
        print("Error en el formato de fecha indicado")