Calcular a data da Páscoa em Oracle


por
Deni Marinho
Já avaliou este artigo?
Calcular a data da Páscoa em Oracle Avaliação 5/5 - 1 votos.

O cálculo da data da Páscoa, também conhecido como Computus em latim, é fundamental no calendário cristão desde os primórdios da cristandade, tornando-se definido na Idade Média.

A Páscoa é celebrada no primeiro domingo após a primeira lua cheia que ocorre depois do equinócio da Primavera (no hemisfério norte, outono no hemisfério sul), ou seja, é equivalente à antiga regra de que seria o primeiro Domingo após o 14º dia do mês lunar de Nisan. Poderá assim ocorrer entre 22 de Março e 25 de Abril. 

CREATE OR REPLACE FUNCTION CP.PASCOA (ANO NUMBER)
   RETURN DATE
AS
   X             NUMBER;
   Y             NUMBER;
   A             NUMBER;
   B             NUMBER;
   C             NUMBER;
   D             NUMBER;
   E             NUMBER;
   DIA           NUMBER;
   MES           NUMBER;
   DATA_PASCOA   DATE;
BEGIN
   IF ANO > 1581 AND ANO < 1700
   THEN
      X := 22;
      Y := 2;
   ELSIF ANO > 1699 AND ANO < 1800
   THEN
      X := 23;
      Y := 3;
   ELSIF ANO > 1799 AND ANO < 1900
   THEN
      X := 24;
      Y := 4;
   ELSIF ANO > 1899 AND ANO < 2100
   THEN
      X := 24;
      Y := 5;
   ELSIF ANO > 2099 AND ANO < 2200
   THEN
      X := 24;
      Y := 6;
   ELSIF ANO > 2199 AND ANO < 2300
   THEN
      X := 25;
      Y := 7;
   END IF;

   A := ANO MOD 19;
   B := ANO MOD 4;
   C := ANO MOD 7;
   D := (19 * A + X) MOD 30;
   E := (2 * B + 4 * C + 6 * D + Y) MOD 7;

   IF (D + E) > 9
   THEN
      DIA := D + E - 9;
      MES := 4;
   ELSE
      DIA := D + E + 22;
      MES := 3;
   END IF;

   DATA_PASCOA := TO_DATE (DIA || '-' || MES || '-' || ANO, 'DD-MM-YYYY');

   IF MES = 4 AND DIA = 26
   THEN
      DATA_PASCOA := DATA_PASCOA - 7;
   END IF;

   IF MES = 4 AND DIA = 25 AND D = 28 AND A > 10
   THEN
      DIA := 18;
      DATA_PASCOA := TO_DATE (DIA || '-' || MES || '-' || ANO, 'DD-MM-YYYY');
   END IF;

   RETURN TRUNC (DATA_PASCOA);
END;
/

P.S. Para se calcular outros feriados móveis temos:

Carnaval = Páscoa - 47 dias
Sexta-feira Santa = Páscoa - 2 dias
Corpus Christi = Páscoa + 60 dias

Referências: 
http://www.inf.ufrgs.br/~cabral/Pascoa.html
http://pt.wikipedia.org/wiki/Cálculo_da_Páscoa
http://www.inf.ufrgs.br/~cabral/tabela_pascoa.html


 

Comentários

Carregando comentários

Postar um novo comentário



Processando...