Clase Java FechasMoviles.

La clase Java FechasMoviles computa el Domingo de Resurrección y otras fechas móviles correspondientes a un año entregado como parámetro, de acuerdo con la Iglesia Católica Romana y utilizando el calendario gregoriano. A continuación se muestra su código fuente, que también está disponible para descarga en FechasMoviles.zip.

import java.util.Calendar;

/**
 * Indica las fechas de varias fiestas móviles para un año dado
 * (especificado en la línea de comandos).<p>
 *
 * Los resultados son válidos solamente para la Iglesia Católica Romana,
 * usando el calendario gregoriano.<p>
 *
 * La fórmula fue extraída del documento Calendar FAQ, disponible en
 * http://www.tondering.dk/claus/calendar.html .<p>
 *
 * @see <a href="http://www.feriadoschilenos.cl/FechasMoviles.html">Clase Java FechasMoviles.</a>
 */
public class FechasMoviles {

    static private Calendar calculaElDomingoDeResurreccion(final int anyo) {
        int dia, mes;
        int c, g, h, i, j, l;

        g = anyo % 19;
        c = anyo/100;
        h = (c - c/4 - (8*c+13)/25 + 19*g + 15) % 30;
        i = h - (h/28)*(1 - (29/(h + 1))*((21 - g)/11));
        j = (anyo + anyo/4 + i + 2 - c + c/4) % 7;
        l = i - j;

        mes = 3 + (l + 40)/44;      // Este es el mes.
        dia = l + 28 - 31*(mes/4);  // Este es el día.

        Calendar d=Calendar.getInstance();

        d.set( anyo, mes-1, dia);
        // OJO: los meses en Java se cuentan desde 0 (enero) hasta 11
        // (diciembre). Esta sustracción NO es parte de la fórmula.

        return d;
    }



    static private String frase(final Calendar c) {
        if (c==null) return "";
        String dia, mes;

        switch (c.get(Calendar.DAY_OF_WEEK)) {
            case Calendar.MONDAY   : dia="lunes";         break;
            case Calendar.TUESDAY  : dia="martes";        break;
            case Calendar.WEDNESDAY: dia="miércoles";     break;
            case Calendar.THURSDAY : dia="jueves";        break;
            case Calendar.FRIDAY   : dia="viernes";       break;
            case Calendar.SATURDAY : dia="sábado";        break;
            case Calendar.SUNDAY   : dia="domingo";       break;
            default:                 dia="errades";       break;
        }

        switch (c.get(Calendar.MONTH)) {
            case Calendar.JANUARY  : mes="enero";         break;
            case Calendar.FEBRUARY : mes="febrero";       break;
            case Calendar.MARCH    : mes="marzo";         break;
            case Calendar.APRIL    : mes="abril";         break;
            case Calendar.MAY      : mes="mayo";          break;
            case Calendar.JUNE     : mes="junio";         break;
            case Calendar.JULY     : mes="julio";         break;
            case Calendar.AUGUST   : mes="agosto";        break;
            case Calendar.SEPTEMBER: mes="septiembre";    break;
            case Calendar.OCTOBER  : mes="octubre";       break;
            case Calendar.NOVEMBER : mes="noviembre";     break;
            case Calendar.DECEMBER : mes="diciembre";     break;
            default:                 mes="inexistembre";  break;
        }

        return ( dia+" "
                +String.valueOf(c.get(Calendar.DATE))
                +" de "+mes+" de "
                +String.valueOf(c.get(Calendar.YEAR))
               );
    }



    static public void main(final String[] args) {
        int a=new Integer(args[0]).intValue();
        if (a<=1582) {
            System.out.println("Esta clase solamente funciona con el calendario gregoriano.");
            System.exit(1);
        }

        Calendar domingoDeResurreccion=calculaElDomingoDeResurreccion(a);

        Calendar miercolesDeCeniza       =(Calendar)domingoDeResurreccion.clone();
        Calendar viernesSanto            =(Calendar)domingoDeResurreccion.clone();
        Calendar sabadoSanto             =(Calendar)domingoDeResurreccion.clone();
        Calendar diaSegundoDeResurreccion=(Calendar)domingoDeResurreccion.clone();
        Calendar ascensionDelSenyor      =(Calendar)domingoDeResurreccion.clone();
        Calendar pentecostes             =(Calendar)domingoDeResurreccion.clone();
        Calendar diaSegundoDePentecostes =(Calendar)domingoDeResurreccion.clone();
        Calendar santisimaTrinidad       =(Calendar)domingoDeResurreccion.clone();
        Calendar corpusChristi           =(Calendar)domingoDeResurreccion.clone();

        miercolesDeCeniza.add(       Calendar.DATE, -46);
        viernesSanto.add(            Calendar.DATE,  -2);
        sabadoSanto.add(             Calendar.DATE,  -1);
        diaSegundoDeResurreccion.add(Calendar.DATE,   1);
        ascensionDelSenyor.add(      Calendar.DATE,  39);
        pentecostes.add(             Calendar.DATE,  49);
        diaSegundoDePentecostes.add( Calendar.DATE,  50);
        santisimaTrinidad.add(       Calendar.DATE,  56);
        corpusChristi.add(           Calendar.DATE,  60);

        System.out.println("Miércoles de Ceniza:                   "+frase(miercolesDeCeniza        )+".");
        System.out.println("Viernes Santo:                         "+frase(viernesSanto             )+".");
        System.out.println("Sábado Santo:                          "+frase(sabadoSanto              )+".");
        System.out.println("Pascua de Resurrección:                "+frase(domingoDeResurreccion    )+".");
        System.out.println("Día Segundo de Pascua de Resurrección: "+frase(diaSegundoDeResurreccion )+".");
        System.out.println("Ascensión del Señor:                   "+frase(ascensionDelSenyor       )+".");
        System.out.println("Pentecostés:                           "+frase(pentecostes              )+".");
        System.out.println("Día Segundo de Pentecostés:            "+frase(diaSegundoDePentecostes  )+".");
        System.out.println("Santísima Trinidad:                    "+frase(santisimaTrinidad        )+".");
        System.out.println("Corpus Christi:                        "+frase(corpusChristi            )+".");
    }

}


Última actualización: 27 de diciembre de 2013.

Volver a Días Feriados en Chile.
Volver a Días Feriados en Chile: anexos.


HTML 4.01 estricto VÁLIDO CSS VÁLIDO
Todos los derechos reservados por Miguel Farah.
Si tiene alguna consulta o comentario, puede utilizar el formulario de contacto dispuesto para este efecto.