Olá, gostaria de compartilhar um código para calcular a data da Páscoa que um dia era em Visual Basic 6, mas converti em 2006 para C# e ainda é muito útil.
História
A Páscoa é uma festa com data móvel em relação ao nosso calendário. O Primeiro Concílio de Niceia que ocorreu no ano 325 depois de Cristo estabeleceu a data da Páscoa como sendo o primeiro domingo depois da lua cheia seguinte ao equinócio vernal (a chamada lua cheia pascoal). Conforme eclesiásticos, o equinócio vernal acontece em 21 de março (mas ocorre no dia 20 de março na maioria dos anos conforme astronomia) e a "lua cheia" não ocorre necessariamente na data astronômica.
Talvez uma informação interessante para o seu sistema é que a Páscoa sempre irá variar entre 22 de março a 26 de abril no calendário gregoriano.
Código C# para calcular páscoa, carnaval e feriados relacionados
Com a data da Páscoa definida, agora fica fácil saber o dia do Carnaval, Quarta-Feira de cinzas, Sexta-Feira Santa e Corpus Christi.
public enum FeriadoEnum
{
Carnaval,
QuartaCinzas,
SextaSanta,
CorpusChristi,
Pascoa,
}
public static DateTime CalcularFeriado(int ano, FeriadoEnum feriado)
{
DateTime data = CalcularPascoa(ano);
switch (feriado)
{
case FeriadoEnum.Carnaval:
return data.AddDays(-47);
case FeriadoEnum.QuartaCinzas:
return data.AddDays(-46);
case FeriadoEnum.SextaSanta:
return data.AddDays(-2);
case FeriadoEnum.CorpusChristi:
return data.AddDays(60);
}
return data;
}
private static DateTime CalcularPascoa(int ano)
{
int r1 = ano % 19;
int r2 = ano % 4;
int r3 = ano % 7;
int r4 = (19 * r1 + 24) % 30;
int r5 = (6 * r4 + 4 * r3 + 2 * r2 + 5) % 7;
DateTime dataPascoa = new DateTime(ano, 3, 22).AddDays(r4 + r5);
int dia = dataPascoa.Day;
switch (dia)
{
case 26:
dataPascoa = new DateTime(ano, 4, 19);
break;
case 25:
if (r1 > 10)
dataPascoa = new DateTime(ano, 4, 18);
break;
}
return dataPascoa.Date;
}
Espero que ajude! Até a próxima!