Top Qs
Linha do tempo
Chat
Contexto

Cálculo da Páscoa

Cálculo do dia em que deve acontecer a Páscoa Da Wikipédia, a enciclopédia livre

Cálculo da Páscoa
Remove ads
Remove ads

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.

Thumb
Tábua medieval da Escandinávia, em escrita rúnica, para cálculo da data da Páscoa
Thumb
Distribuição das datas da Páscoa para um período completo de 5.700.000 anos.

A Páscoa é celebrada no primeiro domingo após a primeira lua cheia que ocorre no dia do equinócio da Primavera, ou logo a seguir, (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 Nissan. O dia do domingode Páscoa pode variar entre as datas extremas de 22 de Março e de 25 de Abril, dependendo da disposição dos dias e dos meses nas semanas.

Os dias extremos deste intervalo correspondem muito raramente a domingos de Páscoa. A última vez que ocorreu a 22 de Março foi em 1818 e a próxima será em 2285. Menos raras são as Páscoas a 23 de Março (anos 1913, 2008 e 2160) e 25 de Abril (anos 1943, 2038 e 2190).[1]

Remove ads

Cálculo da data da Páscoa recorrendo a tabela simples

Resumir
Perspectiva

Obtenha o número dourado somando 1 ao resto da divisão inteira do ano em questão por 19.

Ao número final chamaremos de "X". Esse número é o número áureo que quer dizer "número dourado" pelo seu valor co cômputo pascal que corresponde a uma data específica dada na tabela abaixo. Esse número áureo corresponde à data da Lua cheia pascal. A Páscoa será celebrada ao domingo seguinte à data encontrada na tabela. Caso a data já seja um domingo, a Páscoa é o domingo da semana seguinte.

Exemplo:

2020/19 é igual a 106, com resto 6;

6+1 = 7 (Número dourado)

Consultando na tabela, chega-se a 8 de abril, depois procura-se o domingo seguinte. A Páscoa em 2020 será no dia 12 de abril, já que o dia 8 é uma quarta-feira.

Mais informação Ano, X ...
Remove ads

Cálculo da data da Páscoa recorrendo a algoritmos

Resumir
Perspectiva

Algoritmo de Gauss

Para calcular o dia da Páscoa (Domingo), usa-se a fórmula abaixo, onde o "ANO" deve ser introduzido com 4 dígitos. O operador MOD é o resto da divisão.

 a = ANO MOD 19
 b = ANO MOD 4
 c = ANO MOD 7
 
 No calendário gregoriano:
 k = ANO / 100
 p = (13 + 8*k) / 25
 q = k / 4
 M = (15 - p + k - q) MOD 30
 N = (4 + k - q) MOD 7
 No calendário Juliano:
 M = 15
 N = 6
 
 d = ((19*a) + M) MOD 30
 e = ((2*b) + (4*c) + (6*d) + N) MOD 7
 
 março = 22 + d + e
 abril = d + e - 9
 
 SE abril == 25 E d == 28 E e == 6 E (11*M + 11) MOD 30 < 19 :
   abril = 18
 SE abril == 26 E d == 29 E e == 6 :
   abril = 19
 
 SE março ≤ 31 :
   mês = 3
   dia = março
 SENÃO :
   mês = 4
   dia = abril
exemplos:
Para o ano de 2025:
a=2025 MOD 19 = 11
b=2025 MOD 4 = 1
c=2025 MOD 7 = 2
d=(19 * 11 + 24) MOD 30 = 23
e=(2 * 1 + 4 *2 + 6 * 23 + 5) MOD 7 = 6
(d + e) = 23 + 6 = 29
Logo, o Domingo de Páscoa calha 29 dias depois de 22/3/2025, ou seja a 20 de abril de 2025

Algoritmo de Meeus/Jones/Butcher

Outro Algoritmo, conhecido como "Meeus/Jones/Butcher", tem a vantagem de não ter exceções para o calendário gregoriano (a partir de 1583), conforme apresentado por Jean Meeus em seu livro "Astronomical Algorithms"[2]:

 a = ANO MOD 19
 b = ANO \ 100
 c = ANO MOD 100
 d = b \ 4
 e = b MOD 4
 f = (b + 8) \ 25
 g = (b - f + 1) \ 3
 h = (19 × a + b - d - g + 15) MOD 30
 i = c \ 4
 k = c MOD 4
 L = (32 + 2 × e + 2 × i - h - k) MOD 7
 m = (a + 11 × h + 22 × L) \ 451
 MÊS = (h + L - 7 × m + 114) \ 31
 DIA = 1+ (h + L - 7 × m + 114)MOD 31

Obs.: O sinal "\" refere-se à divisão obtendo o inteiro (INT). Exemplo: 7\3 é igual a 2 e não a 2,333.

Exemplo para o ano de 2008:

 a = 2008 MOD 19 = 13
 b = 2008 \ 100 = 20
 c = 2008 MOD 100 = 8
 d = 20 \ 4 = 5
 e = 20 MOD 4) = 0
 f = (20 + 8) \ 25 = 1
 g = (20 - 1 + 1) \ 3 = 6
 h = (19 × 13 + 20 - 5 - 6 + 15) MOD 30 = 1
 i = 8 \ 4 = 2
 k = 8 MOD 4 = 0
 L = (32 + 2 × 0 + 2 × 2 - 1 - 0) MOD 7 = 0
 m = (13 + 11 × 1 + 22 × 0) \ 451 = 0
 MÊS = (1 + 0 - 7 × 0 + 114) \ 31 = 3 (Março)
 DIA =1 + (1 + 0 - 7 × 0 + 114) MOD 31 + 1 = 23
 
 Ou seja, a Páscoa de 2008 caiu em 23 de Março.
Remove ads

Datas dos feriados móveis

Resumir
Perspectiva

A seguir temos uma tabela com todos os feriados móveis de um ano, sendo eles: Carnaval, Sexta-Feira Santa, Páscoa e Corpus Christi, do período de 1850 a 2209. [3]

Mais informação Ano, Carnaval ...

Uma forma de aplicação do Algoritmo de Meeus/Jones/Butcher, direta e acessível para a maioria das pessoas que utilizam computadores, é a adaptação de Claytom Valle para ser mostrada numa única célula da planilha Excel®, da Microsoft. Basta copiar o conjunto abaixo (exatamente como mostrado, sem espaços) e colar na célula onde se espera que seja exibida a data da Páscoa. Nesse exemplo, considerou-se uma célula chamada "Ano" (definida através da opção "Definir Nome" do Excel®), mas pode-se substituir todas as palavras "Ano" pela célula que contenha o ano desejado (como por exemplo "A1", sem aspas):

=DATA(ano;INT((MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30)+MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)-(7*INT(((MOD(ano;19))+(11*MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))+(22*MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)))/451))+114)/31);MOD((MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30)+MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)-(7*INT(((MOD(ano;19))+(11*MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))+(22*MOD((32+(2*MOD(INT(ano/100);4))+(2*INT(MOD(ano;100)/4))-(MOD((19*(MOD(ano;19))+(INT(ano/100))-(INT(INT(ano/100)/4))-(INT((INT(ano/100)-(INT((INT(ano/100)+8)/25))+1)/3))+15);30))-(MOD(MOD(ano;100);4)));7)))/451))+114);31)+1)

Observação: devido à limitação do Excel em relação à Função "Data", a fórmula acima só funciona entre os anos 1900 e 9999.

Abaixo, o Algoritmo convertido para a linguagem "Transact-SQL Server". Poderá também ser adaptado para qualquer outra linguagem de programação:

 CREATE FUNCTION fncPascoa (@ANO int)
 RETURNS datetime
 AS
 BEGIN
 DECLARE @DATA AS DATETIME
 DECLARE @MES AS INT
 DECLARE @DIA AS INT
 DECLARE @A AS INT
 DECLARE @B AS INT
 DECLARE @C AS INT
 DECLARE @D AS INT
 DECLARE @E AS INT
 DECLARE @F AS INT
 DECLARE @G AS INT
 DECLARE @H AS INT
 DECLARE @I AS INT
 DECLARE @K AS INT
 DECLARE @L AS INT
 DECLARE @M AS INT
 SET @A = @ANO%19
 SET @B = @ANO/100
 SET @C = @ANO%100
 SET @D = @B/4
 SET @E = @B%4
 SET @F = (@B+8)/25
 SET @G = (@B-@F+1)/3
 SET @H = (19*@A+@B-@D-@G+15)%30
 SET @I = @C/4
 SET @K = @C%4
 SET @L = (32+2*@E+2*@I-@H-@K)%7
 SET @M = (@A+11*@H+22*@L)/451
 SET @MES = (@H+@L-7*@M+114)/31
 SET @DIA = ((@H+@L-7*@M+114)%31)+1
 SET @DATA = CAST((LTRIM(RTRIM(CAST(@ANO AS CHAR)))) + '-' + 
 (LTRIM(RTRIM(CAST(@MES AS CHAR)))) + '-' + 
 (LTRIM(RTRIM(CAST(@DIA AS CHAR)))) AS DATETIME)
 RETURN(@DATA)
 END;
 GO

R

Exemplo de códico em R

  require(lubridate)
  easterDay <- function(year){
  a <- year %% 19
  b <- floor(year / 100)
  c <- year %% 100
  
  d <- floor(b / 4)
  e <- b %% 4
  
  f <- floor((b + 8) / 25)
  
  g <- floor((b - f + 1)/3)
  
  h <- (19*a + b - d - g + 15) %% 30
  
  i <- floor(c / 4)
  k <- c %% 4 
  
  l <- (32 + 2 * e + 2 * i - h - k) %% 7
  
  m <- floor((a + 11*h + 22*l)/451)
  
  n <- floor((h + l - 7*m + 114)/31)
  
  p <- (h + l - 7*m + 114) %% 31
  
  return(c(as.character(month(n, label = TRUE)), p + 1))  
}

Exemplo de utilização, easterDay(2018), retorna o vetor "Apr" "1".

C#

Exemplo de código em C#

public static string Calcula(int nAno) {
  int nRest = (nAno % 19) + 1;
  DateTime oDia = new DateTime();
  switch (nRest) {
    case  1: oDia = new System.DateTime(nAno, 4, 14, 0, 0, 0, 0); break;
    case  2: oDia = new System.DateTime(nAno, 4,  3, 0, 0, 0, 0); break;
    case  3: oDia = new System.DateTime(nAno, 3, 23, 0, 0, 0, 0); break;
    case  4: oDia = new System.DateTime(nAno, 4, 11, 0, 0, 0, 0); break;
    case  5: oDia = new System.DateTime(nAno, 3, 31, 0, 0, 0, 0); break;
    case  6: oDia = new System.DateTime(nAno, 4, 18, 0, 0, 0, 0); break;
    case  7: oDia = new System.DateTime(nAno, 4,  8, 0, 0, 0, 0); break;
    case  8: oDia = new System.DateTime(nAno, 3, 28, 0, 0, 0, 0); break;
    case  9: oDia = new System.DateTime(nAno, 4, 16, 0, 0, 0, 0); break;
    case 10: oDia = new System.DateTime(nAno, 4,  5, 0, 0, 0, 0); break;
    case 11: oDia = new System.DateTime(nAno, 3, 25, 0, 0, 0, 0); break;
    case 12: oDia = new System.DateTime(nAno, 4, 13, 0, 0, 0, 0); break;
    case 13: oDia = new System.DateTime(nAno, 4,  2, 0, 0, 0, 0); break;
    case 14: oDia = new System.DateTime(nAno, 3, 22, 0, 0, 0, 0); break;
    case 15: oDia = new System.DateTime(nAno, 4, 10, 0, 0, 0, 0); break;
    case 16: oDia = new System.DateTime(nAno, 3, 30, 0, 0, 0, 0); break;
    case 17: oDia = new System.DateTime(nAno, 4, 17, 0, 0, 0, 0); break;
    case 18: oDia = new System.DateTime(nAno, 4,  7, 0, 0, 0, 0); break;
    case 19: oDia = new System.DateTime(nAno, 3, 27, 0, 0, 0, 0); break;
  }
  string cRet = ""; 
  for (int n = 1; n <= 13; n++) {
    oDia= oDia.AddDays(1);
    if (oDia.DayOfWeek == DayOfWeek.Sunday) {
      cRet = oDia.Day.ToString();
      cRet += oDia.Month == 3 ? " de março" : " de abril";
    
      return cRet;
    }
  } 
  return "";
}


PHP

Exemplo de código em PHP, o PHP possui nativamente um recurso para obter a data da páscoa, sendo:

date("d-m-Y", easter_date($Ano));

Porém, a função easter_date() pode retornar a data incorreta dependendo do fuso horário do servidor. Para corrigir isto, pode-se usar o seguinte código (compatível com PHP 5.3+):

function findPascoa($ano)
{
  $date = new DateTime('now', new DateTimeZone('UTC'));
  $date->setTimestamp(easter_date($ano));
  return $date->format('d-m-Y');
}

Exemplo manual de cálculo para obter a data da Páscoa:

/**
  * Anos de 1582 a 1599 X=22 e Y=2
  * Anos de 1600 a 1699 X=22 e Y=2
  * Anos de 1700 a 1799 X=23 e Y=3
  * Anos de 1800 a 1899 X=24 e Y=4
  * Anos de 1900 a 1999 X=24 e Y=5
  **> Anos de 2000 a 2099 X=24 e Y=5 <**
  * Anos de 2100 a 2199 X=24 e Y=6
  * Anos de 2200 a 2299 X=25 e Y=7
  * 
  */
function findPascoa($ano)
{
  $X = 24;
  $Y = 5;

  $a = ($ano % 19);
  $b = ($ano % 4);
  $c = ($ano % 7);
  $d = ((19 * $a + $X) % 30);
  $e = ((2 * $b + 4 * $c + 6 * $d + $Y) % 7);
  
  if (($d + $e) > 9) { $dia = ($d + $e - 9); $mes = 4; } else { $dia = ($d + $e + 22); $mes = 3; }
  if (($dia == 26) AND ($mes == 4)) { $dia = 19; }
  if (($dia == 25) AND ($mes == 4) AND ($d == 28) AND ($a > 10)) { $dia = 18; }
  
  return sprintf("%02d-%02d-%04d", $dia, $mes, $ano);
}

PL/SQL

Exemplo de código em PL/SQL

 SET SERVEROUTPUT ON;
 DECLARE
 MES number;
 DIA number;
 A   number;
 B   number;
 C   number;
 D   number;
 E   number;
 F   number;
 G   number;
 H   number;
 I   number;
 K   number;
 L   number;
 M   number;
 ANO NUMBER;
 DATA_PASCOA DATE;
BEGIN
    ANO:= 2021; /*ESTE PARAMETRO EH O ANO PARA O QUAL SE DESEJA CALCULAR A DATA DE PASCOA*/
    A := MOD(ANO, 19);
    B := TRUNC(ANO/100);
    C := MOD(ANO, 100);
    D := TRUNC(B/4);
    E := MOD(B, 4);
    F := TRUNC((B+8)/25);
    G := TRUNC((B-F+1)/3);
    H := MOD((19*A+B-D-G+15), 30);
    I := TRUNC(C/4);
    K := MOD(C, 4);
    L := MOD((32+2*E+2*I-H-K),7);
    M := TRUNC((A+11*H+22*L)/451);
    MES := TRUNC((H+L-7*M+114)/31);
    DIA := MOD((H+L-7*M+114), 31) + 1;
    
    /*
    SYS.DBMS_OUTPUT.put_line('A= '||A);
    SYS.DBMS_OUTPUT.put_line('B= '||B);
    SYS.DBMS_OUTPUT.put_line('C= '||C);
    SYS.DBMS_OUTPUT.put_line('D= '||D);
    SYS.DBMS_OUTPUT.put_line('E= '||E);
    SYS.DBMS_OUTPUT.put_line('F= '||F);
    SYS.DBMS_OUTPUT.put_line('G= '||G);
    SYS.DBMS_OUTPUT.put_line('H= '||H);
    SYS.DBMS_OUTPUT.put_line('I= '||I);
    SYS.DBMS_OUTPUT.put_line('K= '||K);
    SYS.DBMS_OUTPUT.put_line('L= '||L);
    SYS.DBMS_OUTPUT.put_line('M= '||M);
    */
 
    DATA_PASCOA := TO_DATE(LPAD(DIA,2,'0')||'/'||LPAD(MES,2,'0')||'/'||ANO, 'DD/MM/YYYY');
 
    SYS.DBMS_OUTPUT.put_line('DATA_PASCOA = '||DATA_PASCOA );
 
 END;
 /

JAVA

Exemplo de código em Java

/*
@param ano o ano para calcular 
*/
private void dataPascoa_Carnaval(int ano) {
	GregorianCalendar data_Pascoa = new GregorianCalendar();
	GregorianCalendar data_Carnaval = new GregorianCalendar();
	GregorianCalendar data_CorpusChristi = new GregorianCalendar();
	GregorianCalendar data_SextaFeiraSanta = new GregorianCalendar();

		int a = ano % 19;
		int b = ano / 100;
		int c = ano % 100;
		int d = b / 4;
		int e = b % 4;
		int f = (b + 8) / 25;
		int g = (b - f + 1) / 3;
		int h = (19 * a + b - d - g + 15) % 30;
		int i = c / 4;
		int k = c % 4;
		int l = (32 + 2 * e + 2 * i - h - k) % 7;
		int m = (a + 11 * h + 22 * l) / 451;
		int mes = (h + l - 7 * m + 114) / 31;
		int dia = ((h + l - 7 * m + 114) % 31) + 1;

		data_Pascoa.set(Calendar.YEAR, ano);
		data_Pascoa.set(Calendar.MONTH, mes-1);
		data_Pascoa.set(Calendar.DAY_OF_MONTH, dia);
		
		//Carnaval 47 dias antes da pascoa
		data_Carnaval.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_Carnaval.add(Calendar.DAY_OF_MONTH, -47);
		//CorpusChristi 60 dias apos a pascoa
		data_CorpusChristi.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_CorpusChristi.add(Calendar.DAY_OF_MONTH, 60);
		
		data_SextaFeiraSanta.setTimeInMillis(data_Pascoa.getTimeInMillis());
		data_SextaFeiraSanta.add(Calendar.DAY_OF_MONTH, -2);
	}

JavaScript

Exemplo de código em Javascript

function easterSunday (year) {
 var X=0;
 var Y=0;
 
 if (year>=1582 && year<=1699){X = 22; Y = 2;}
 if (year>=1700 && year<=1799){X = 23; Y = 3;}
 if (year>=1800 && year<=1899){X = 23; Y = 4;}
 if (year>=1900 && year<=2099){X = 24; Y = 5;}
 if (year>=2100 && year<=2199){X = 24; Y = 6;}
 if (year>=2200 && year<=2299){X = 25; Y = 7;}
 
 var a = yeara% 19;
 var b = yearv% 4;
 var c = year % 7;
 var d = ((19*a)+X)d% 30;
 var e = (((2*b)+(4*c)+(6*d)+Y))%7;
 
 var day;
 var month;
 if ((d+e)<10) { 
 day = d+e+22; 
 month = 3;
 }
 else {
 day = d+e-9; 
 month = 4;
 }
 //26 of april 2076
 if (day==26 && month==4) {
 day = 19;
 }
 
 //25 of april 2049
 if (day==25 && month==4 && d==28 && a>10) {
 day = 18;
 }
 
 return new Date(year, month-1, day, 0, 0, 0, 0);
}

Excel®

Há tres formas mais simples utilizando funções do Excel® para retornar a data da páscoa, sendo a segunda bastante curiosa. Ambas consideram que na célula "A1" esteja o ano desejado, mas apenas funcionam entre os anos 1900 e 9999.

A primeira fórmula:

=ARRED(DATA(A1;4;1)/7+MOD(19*MOD(A1;19)-7;30)*14%;0)*7-6 
Excel versão português europeu substituir MOD por RESTO

A segunda fórmula:

=MOEDA(("4/"&A1)/7+MOD(19*MOD(A1;19)-7;30)*14%;)*7-6 
Excel versão português europeu substituir MOD por RESTO

A terceira fórmula:

=ARREDMULTB(DIA(MINUTO(A1/38)/2+56)&"/5"&"/"&A1;7)-34 
Excel versão português europeu substituir ARREDMULTB por ARRED.DEFEITO


Para retornar o dia do carnaval, basta subtrair 47 dias da data da Páscoa. Corpus Christi pode ser obtido somando-se 60 dias à data da Páscoa.

SQLite

Exemplo de código para cálculo da data da Páscoa em 2018:

SELECT
  DATE(anoMesDia, "+" || (7 - STRFTIME("%w", anoMesDia)) || " days") AS pascoa
FROM (
  SELECT
  ano || SUBSTR(mesDia, 1 + (ano % 19) * 6, 6) AS anoMesDia
  FROM (
  SELECT
  "-04-14-04-03-03-23-04-11-03-31-04-18-04-08-03-28-04-16-04-05-03-25-04-13-04-02-03-22-04-10-03-30-04-17-04-07-03-27" AS mesDia,
  2018 AS ano));
Remove ads

Referências

  1. Astronomical Society of South Australia. «List of Easter Sunday Dates». Consultado em 9 de abril de 2015
  2. Jean Meeus (1991). Astronomical Algorithms. Richmond, Virginia: Willmann-Bell. p. 67–68
  3. GM Arts. «Easter Sunday Date FAQ». Consultado em 11 de abril de 2015
O Commons possui uma categoria com imagens e outros ficheiros sobre Cálculo da Páscoa
Loading related searches...

Wikiwand - on

Seamless Wikipedia browsing. On steroids.

Remove ads