Cálculo da Páscoa
![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/e/e7/P%C3%A5sktavla_ur_Liljegrens_Runl%C3%A4ra_%28ur_Sverige_Runinskrifter%29.png/200px-P%C3%A5sktavla_ur_Liljegrens_Runl%C3%A4ra_%28ur_Sverige_Runinskrifter%29.png)
![](http://178.128.105.246/cars-http-upload.wikimedia.org/wikipedia/commons/thumb/3/3b/Easter_Distribution.png/220px-Easter_Distribution.png)
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 Nissan. O dia de domingo pode variar desde 22 de Março até 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]
Cálculo da data da Páscoa recorrendo a tabela simples
[editar | editar código-fonte]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 dourado" que corresponde a uma data específica dada na tabela abaixo. 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 veja qual o domingo seguinte. A Páscoa em 2020 será dia 12 de abril, já que dia 8 é quarta-feira.
Ano | X | Data | |
---|---|---|---|
1995 | 2014 | 1 | 14 de Abril |
1996 | 2015 | 2 | 3 de Abril |
1997 | 2016 | 3 | 23 de Março |
1998 | 2017 | 4 | 11 de Abril |
1999 | 2018 | 5 | 31 de Março |
2000 | 2019 | 6 | 18 de Abril |
2001 | 2020 | 7 | 8 de Abril |
2002 | 2021 | 8 | 28 de Março |
2003 | 2022 | 9 | 16 de Abril |
2004 | 2023 | 10 | 5 de Abril |
2005 | 2024 | 11 | 25 de Março |
2006 | 2025 | 12 | 13 de Abril |
2007 | 2026 | 13 | 2 de Abril |
2008 | 2027 | 14 | 22 de Março |
2009 | 2028 | 15 | 10 de Abril |
2010 | 2029 | 16 | 30 de Março |
2011 | 2030 | 17 | 17 de Abril |
2012 | 2031 | 18 | 7 de Abril |
2013 | 2032 | 19 | 27 de Março |
Cálculo da data da Páscoa recorrendo a algoritmos
[editar | editar código-fonte]Algoritmo de Gauss
[editar | editar código-fonte]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. Os valores X e Y são retirados da tabela a seguir: [2]
Faixa de anos | X | Y | |
---|---|---|---|
1582 | 1699 | 22 | 2 |
1700 | 1799 | 23 | 3 |
1800 | 1899 | 23 | 4 |
1900 | 2099 | 24 | 5 |
2100 | 2199 | 24 | 6 |
2200 | 2299 | 25 | 7 |
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 se: (d+e)<10 então o dia = (d+e+22) e mês=Março senão: dia=(d+e-9) e mês=Abril
exceções: # quando o domingo de Páscoa calculado for 26 de Abril, corrige-se para uma semana antes, ou seja, 19 de Abril (ocorre em 2076). # quando o domingo de Páscoa calculado for 25 de Abril e d=28 e a>10, então a Páscoa é em 18 de Abril (ocorre em 2049).
- exemplos:
- Para o ano de 2024:
- a=2024 MOD 19 = 10
- b=2024 MOD 4 = 0
- c=2024 MOD 7 = 1
- d=(19 * 10 + 24) MOD 30 = 4
- e=(2 * 0 + 4 *1 + 6 * 4 + 5) MOD 7 = 5
- (d + e) = 4 + 5 = 9
- Logo, o Domingo de Páscoa calha 9 dias depois de 22/3/2024, ou seja a 31 de março de 2024
Algoritmo de Meeus/Jones/Butcher
[editar | editar código-fonte]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"[3]:
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.
Datas dos feriados móveis
[editar | editar código-fonte]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. [4]
Ano | Carnaval | Sexta-feira Santa | Páscoa | Corpus Christi | |||
---|---|---|---|---|---|---|---|
- | 1900 | 1990 | 2142 | 27 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
- | - | 1991 | 2143 | 12 de fevereiro | 29 de março | 31 de março | 30 de maio |
- | - | 1992 | 2144 | 3 de março | 17 de abril | 19 de abril | 18 de junho |
- | - | 1993 | 2145 | 23 de fevereiro | 9 de abril | 11 de abril | 10 de junho |
- | - | 1994 | 2146 | 15 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | - | 1995 | 2147 | 28 de fevereiro | 14 de abril | 16 de abril | 15 de junho |
- | 1901* | 1996 | 2148 | 20 (19*) de fevereiro | 5 de abril | 7 de abril | 6 de junho |
- | 1902 | 1997 | 2149 | 11 de fevereiro | 28 de março | 30 de março | 29 de maio |
- | 1903 | 1998 | 2150 | 24 de fevereiro | 10 de abril | 12 de abril | 11 de junho |
- | - | 1999 | 2151 | 16 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
- | 1904 | - | - | 16 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | 1905 | 2000 | 2152 | 7 de março | 21 de abril | 23 de abril | 22 de junho |
- | 1906 | 2001 | 2153 | 27 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
1850 | 1907 | 2002 | 2154 | 12 de fevereiro | 29 de março | 31 de março | 30 de maio |
1851 | - | 2003 | 2155 | 4 de março | 18 de abril | 20 de abril | 19 de junho |
- | 1908 | - | - | 3 de março | 17 de abril | 19 de abril | 18 de junho |
1852 | 1909* | 2004 | 2156 | 24 (23*) de fevereiro | 9 de abril | 11 de abril | 10 de junho |
1853 | 1910 | 2005 | 2157 | 8 de fevereiro | 25 de março | 27 de março | 26 de maio |
1854 | 1911 | 2006 | 2158 | 28 de fevereiro | 14 de abril | 16 de abril | 15 de junho |
1855 | - | 2007 | 2159 | 20 de fevereiro | 6 de abril | 8 de abril | 7 de junho |
- | 1912 | - | - | 20 de fevereiro | 5 de abril | 7 de abril | 6 de junho |
1856 | 1913* | 2008 | 2160 | 5 (4*) de fevereiro | 21 de março | 23 de março | 22 de maio |
1857 | 1914 | 2009 | 2161 | 24 de fevereiro | 10 de abril | 12 de abril | 11 de junho |
1858 | 1915 | 2010 | 2162 | 16 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
1859 | - | 2011 | 2163 | 8 de março | 22 de abril | 24 de abril | 23 de junho |
- | 1916 | - | - | 7 de março | 21 de abril | 23 de abril | 22 de junho |
1860 | 1917* | 2012 | 2164 | 21 (20*) de fevereiro | 6 de abril | 8 de abril | 7 de junho |
1861 | 1918 | 2013 | 2165 | 12 de fevereiro | 29 de março | 31 de março | 30 de maio |
1862 | 1919 | 2014 | 2166 | 4 de março | 18 de abril | 20 de abril | 19 de junho |
1863 | - | 2015 | 2167 | 17 de fevereiro | 3 de abril | 5 de abril | 4 de junho |
- | 1920 | - | - | 17 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
1864 | 1921* | 2016 | 2168 | 9 (8*) de fevereiro | 25 de março | 27 de março | 26 de maio |
1865 | 1922 | 2017 | 2169 | 28 de fevereiro | 14 de abril | 16 de abril | 15 de junho |
1866 | 1923 | 2018 | 2170 | 13 de fevereiro | 30 de março | 1 de abril | 31 de maio |
1867 | - | 2019 | 2171 | 5 de março | 19 de abril | 21 de abril | 20 de junho |
- | 1924 | - | - | 4 de março | 18 de abril | 20 de abril | 19 de junho |
1868 | 1925* | 2020 | 2172 | 25 (24*) de fevereiro | 10 de abril | 12 de abril | 11 de junho |
1869 | - | - | - | 9 de fevereiro | 26 de março | 28 de março | 27 de maio |
- | 1926 | 2021 | 2173 | 16 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
1870 | 1927 | 2022 | 2174 | 1 de março | 15 de abril | 17 de abril | 16 de junho |
1871 | - | 2023 | 2175 | 21 de fevereiro | 7 de abril | 9 de abril | 8 de junho |
- | 1928 | - | - | 21 de fevereiro | 6 de abril | 8 de abril | 7 de junho |
1872 | 1929* | 2024 | 2176 | 13 (12*) de fevereiro | 29 de março | 31 de março | 30 de maio |
1873 | - | - | - | 25 de fevereiro | 11 de abril | 13 de abril | 12 de junho |
- | 1930 | 2025 | 2177 | 4 de março | 18 de abril | 20 de abril | 19 de junho |
1874 | 1931 | 2026 | 2178 | 17 de fevereiro | 3 de abril | 5 de abril | 4 de junho |
1875 | - | 2027 | 2179 | 9 de fevereiro | 26 de março | 28 de março | 27 de maio |
- | 1932 | - | - | 9 de fevereiro | 25 de março | 27 de março | 26 de maio |
1876 | 1933* | 2028 | 2180 | 29 (28*) de fevereiro | 14 de abril | 16 de abril | 15 de junho |
1877 | 1934 | 2029 | 2181 | 13 de fevereiro | 30 de março | 1 de abril | 31 de maio |
1878 | 1935 | 2030 | 2182 | 5 de março | 19 de abril | 21 de abril | 20 de junho |
1879 | - | 2031 | 2183 | 25 de fevereiro | 11 de abril | 13 de abril | 12 de junho |
- | 1936 | - | - | 25 de fevereiro | 10 de abril | 12 de abril | 11 de junho |
1880 | 1937* | 2032 | 2184 | 10 (9*) de fevereiro | 26 de março | 28 de março | 27 de maio |
1881 | 1938 | 2033 | 2185 | 1 de março | 15 de abril | 17 de abril | 16 de junho |
1882 | 1939 | 2034 | 2186 | 21 de fevereiro | 7 de abril | 9 de abril | 8 de junho |
1883 | - | 2035 | 2187 | 6 de fevereiro | 23 de março | 25 de março | 24 de maio |
- | 1940 | - | - | 6 de fevereiro | 22 de março | 24 de março | 23 de maio |
1884 | 1941* | 2036 | 2188 | 26 (25*) de fevereiro | 11 de abril | 13 de abril | 12 de junho |
1885 | 1942 | 2037 | 2189 | 17 de fevereiro | 3 de abril | 5 de abril | 4 de junho |
1886 | 1943 | 2038 | 2190 | 9 de março | 23 de abril | 25 de abril | 24 de junho |
1887 | - | 2039 | 2191 | 22 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
- | 1944 | - | - | 22 de fevereiro | 7 de abril | 9 de abril | 8 de junho |
1888 | 1945* | 2040 | 2192 | 14 (13*) de fevereiro | 30 de março | 1 de abril | 31 de maio |
1889 | 1946 | 2041 | 2193 | 5 de março | 19 de abril | 21 de abril | 20 de junho |
1890 | 1947 | 2042 | 2194 | 18 de fevereiro | 4 de abril | 6 de abril | 5 de junho |
1891 | - | 2043 | 2195 | 10 de fevereiro | 27 de março | 29 de março | 28 de maio |
- | 1948 | - | - | 10 de fevereiro | 26 de março | 28 de março | 27 de maio |
1892 | 1949 | 2044 | 2196 | 1 de março | 15 de abril | 17 de abril | 16 de junho |
1893 | - | - | - | 14 de fevereiro | 31 de março | 2 de abril | 1 de junho |
- | 1950 | 2045 | 2197 | 21 de fevereiro | 7 de abril | 9 de abril | 8 de junho |
1894 | 1951 | 2046 | 2198 | 6 de fevereiro | 23 de março | 25 de março | 24 de maio |
1895 | - | 2047 | 2199 | 26 de fevereiro | 12 de abril | 14 de abril | 13 de junho |
1896 | - | 2048 | - | 18 de fevereiro | 3 de abril | 5 de abril | 4 de junho |
1897 | - | 2049 | 2060 | 2 de março | 16 de abril | 18 de abril | 17 de junho |
1898 | - | 2050 | 2061 | 22 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
1899 | - | 2051 | - | 14 de fevereiro | 31 de março | 2 de abril | 1 de junho |
- | - | - | 2062 | 7 de fevereiro | 24 de março | 26 de março | 25 de maio |
- | - | 2052 | - | 5 de março | 19 de abril | 21 de abril | 20 de junho |
1900 | - | - | 2063 | 27 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
- | - | 2053 | 2064* | 18 (19*) de fevereiro | 4 de abril | 6 de abril | 5 de junho |
- | - | 2054 | 2065 | 10 de fevereiro | 27 de março | 29 de março | 28 de maio |
- | - | 2055 | - | 2 de março | 16 de abril | 18 de abril | 17 de junho |
- | - | - | 2066 | 23 de fevereiro | 9 de abril | 11 de abril | 10 de junho |
- | - | 2056 | - | 15 de fevereiro | 31 de março | 2 de abril | 1 de junho |
- | - | - | 2067 | 15 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | - | 2057 | 2068 | 6 de março | 20 de abril | 22 de abril | 21 de junho |
- | - | 2058 | 2069 | 26 de fevereiro | 12 de abril | 14 de abril | 13 de junho |
- | - | 2059 | 2070 | 11 de fevereiro | 28 de março | 30 de março | 29 de maio |
- | - | 2071 | 2082 | 3 de março | 17 de abril | 19 de abril | 18 de junho |
- | - | 2072 | - | 23 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
- | - | - | 2083 | 16 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
- | - | 2073 | 2084* | 7 (8*) de fevereiro | 24 de março | 26 de março | 25 de maio |
- | - | 2074 | 2085 | 27 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
1901 | - | 2075 | - | 19 de fevereiro | 5 de abril | 7 de abril | 6 de junho |
- | - | 2076 | - | 3 de março | 17 de abril | 19 de abril | 18 de junho |
- | - | - | 2086 | 12 de fevereiro | 29 de março | 31 de março | 30 de maio |
- | - | - | 2087 | 4 de março | 18 de abril | 20 de abril | 19 de junho |
- | - | 2077 | 2088* | 23 (24*) de fevereiro | 9 de abril | 11 de abril | 10 de junho |
- | - | 2078 | 2089 | 15 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | - | 2079 | - | 7 de março | 21 de abril | 23 de abril | 22 de junho |
- | - | 2080 | - | 20 de fevereiro | 5 de abril | 7 de abril | 6 de junho |
1902 | - | 2081 | - | 11 de fevereiro | 28 de março | 30 de março | 29 de maio |
- | - | 2090 | - | 28 de fevereiro | 14 de abril | 16 de abril | 15 de junho |
- | - | 2091 | - | 20 de fevereiro | 6 de abril | 8 de abril | 7 de junho |
- | - | 2092 | - | 12 de fevereiro | 28 de março | 30 de março | 29 de maio |
1903 | - | 2093 | - | 24 de fevereiro | 10 de abril | 12 de abril | 11 de junho |
- | - | 2094 | - | 16 de fevereiro | 2 de abril | 4 de abril | 3 de junho |
- | - | 2095 | - | 8 de março | 22 de abril | 24 de abril | 23 de junho |
- | - | 2096 | - | 28 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
- | - | 2097 | - | 12 de fevereiro | 29 de março | 31 de março | 30 de maio |
- | - | 2098 | - | 4 de março | 18 de abril | 20 de abril | 19 de junho |
- | - | 2099 | - | 24 de fevereiro | 10 de abril | 12 de abril | 11 de junho |
- | - | 2100 | - | 9 de fevereiro | 26 de março | 28 de março | 27 de maio |
- | 1949 | 2101 | - | 1 de março | 15 de abril | 17 de abril | 16 de junho |
- | 1950 | 2102 | - | 21 de fevereiro | 7 de abril | 9 de abril | 8 de junho |
- | 1951 | 2103 | - | 6 de fevereiro | 23 de março | 25 de março | 24 de maio |
- | 1952 | 2104 | - | 26 de fevereiro | 11 de abril | 13 de abril | 12 de junho |
- | 1953 | 2105 | - | 17 de fevereiro | 3 de abril | 5 de abril | 4 de junho |
- | 1954 | 2106 | - | 2 de março | 16 de abril | 18 de abril | 17 de junho |
- | 1955 | 2107 | - | 22 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
- | 1956 | 2108 | - | 14 de fevereiro | 30 de março | 1 de abril | 31 de maio |
- | 1957 | 2109 | - | 5 de março | 19 de abril | 21 de abril | 20 de junho |
- | 1958 | 2110 | 2200 | 18 de fevereiro | 4 de abril | 6 de abril | 5 de junho |
- | 1959 | 2111 | - | 10 de fevereiro | 27 de março | 29 de março | 28 de maio |
- | 1960 | 2112 | - | 1 de março | 15 de abril | 17 de abril | 16 de junho |
- | 1961 | 2113 | - | 14 de fevereiro | 31 de março | 2 de abril | 1 de junho |
- | 1962 | 2114 | - | 6 de março | 20 de abril | 22 de abril | 21 de junho |
- | 1963 | 2115 | - | 26 de fevereiro | 12 de abril | 14 de abril | 13 de junho |
- | 1964 | 2116 | - | 11 de fevereiro | 27 de março | 29 de março | 28 de maio |
- | 1965 | 2117 | - | 2 de março | 16 de abril | 18 de abril | 17 de junho |
- | 1966 | 2118 | - | 22 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
- | 1967 | 2119 | - | 7 de fevereiro | 24 de março | 26 de março | 25 de maio |
- | 1968 | 2120 | - | 27 de fevereiro | 12 de abril | 14 de abril | 13 de junho |
- | 1969 | 2121 | - | 18 de fevereiro | 4 de abril | 6 de abril | 5 de junho |
- | 1970 | 2122 | - | 10 de fevereiro | 27 de março | 29 de março | 28 de maio |
- | 1971 | 2123 | - | 23 de fevereiro | 9 de abril | 11 de abril | 10 de junho |
- | 1972 | 2124 | - | 15 de fevereiro | 31 de março | 2 de abril | 1 de junho |
- | 1973 | 2125 | - | 6 de março | 20 de abril | 22 de abril | 21 de junho |
- | 1974 | 2126 | - | 26 de fevereiro | 12 de abril | 14 de abril | 13 de junho |
- | 1975 | 2127 | - | 11 de fevereiro | 28 de março | 30 de março | 29 de maio |
- | 1976 | 2128 | - | 2 de março | 16 de abril | 18 de abril | 17 de junho |
- | 1977 | 2129 | - | 22 de fevereiro | 8 de abril | 10 de abril | 9 de junho |
- | 1978 | 2130 | - | 7 de fevereiro | 24 de março | 26 de março | 25 de maio |
- | 1979 | 2131 | - | 27 de fevereiro | 13 de abril | 15 de abril | 14 de junho |
- | 1980 | 2132 | - | 19 de fevereiro | 4 de abril | 6 de abril | 5 de junho |
- | 1981 | 2133 | 2201 | 3 de março | 17 de abril | 19 de abril | 18 de junho |
- | 1982 | 2134 | 2202 | 23 de fevereiro | 9 de abril | 11 de abril | 10 de junho |
- | 1983 | 2135 | 2203 | 15 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | 1984 | 2136 | 2204 | 6 de março | 20 de abril | 22 de abril | 21 de junho |
- | 1985 | 2137 | 2205 | 19 de fevereiro | 5 de abril | 7 de abril | 6 de junho |
- | 1986 | 2138 | 2206 | 11 de fevereiro | 28 de março | 30 de março | 29 de maio |
- | 1987 | 2139 | 2207 | 3 de março | 17 de abril | 19 de abril | 18 de junho |
1904 | 1988 | 2140 | 2208 | 16 de fevereiro | 1 de abril | 3 de abril | 2 de junho |
- | 1989 | 2141 | 2209 | 7 de fevereiro | 24 de março | 26 de março | 25 de maio |
Nota: Para anos assinalados com asterisco (*) o Carnaval calha no dia assinalado entre parênteses. |
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
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#
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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
[editar | editar código-fonte]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®
[editar | editar código-fonte]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
[editar | editar código-fonte]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));
Referências
- ↑ Astronomical Society of South Australia. «List of Easter Sunday Dates». Consultado em 9 de abril de 2015
- ↑ Art Johnson (1999). Famous Problemas and Their Mathematicians. Greenwood Village, Colorado: Teachers Ideas press. pp. 11,12. ISBN 978-1563084461
- ↑ Jean Meeus (1991). Astronomical Algorithms. Richmond, Virginia: Willmann-Bell. p. 67–68
- ↑ GM Arts. «Easter Sunday Date FAQ». Consultado em 11 de abril de 2015