Skip to main content

Calcular data de páscoa e carnaval em C#

Cálculo de feriados da páscoa, carnaval, quarta-feira de cinzas, sexta-feira santa e corpus christi em C# .net


páscoa csharp

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!

publicado por Mauricio Hernaski