Você está na página 1de 2

/// <summary>

/// Mtodo que devuelve el Domingo de Pascua dado un ao a consultar.


/// </summary>
/// <param name="anyo">Ao a consultar.</param>
/// <returns>Da del ao que es Domingo de Pascua.</returns>
public static DateTime GetEasterSunday(int anyo)
{
int M = 25;
int N = 5;
if
else
else
else
else
else

(anyo
(anyo
(anyo
(anyo
(anyo
(anyo

if
if
if
if
if

>=
>=
>=
>=
>=
>=

1583
1700
1800
1900
2100
2200

&&
&&
&&
&&
&&
&&

anyo
anyo
anyo
anyo
anyo
anyo

<=
<=
<=
<=
<=
<=

1699)
1799)
1899)
2099)
2199)
2299)

{
{
{
{
{

M
M
M
M
M

{
23;
23;
24;
24;
25;

=
=
=
=
=

M
N
N
N
N
N

=
=
=
=
=
=

22; N = 2; }
3; }
4; }
5; }
6; }
0; }

int a, b, c, d, e, dia, mes;


//Clculo de residuos
a = anyo % 19;
b = anyo % 4;
c = anyo % 7;
d = (19 * a + M) % 30;
e = (2 * b + 4 * c + 6 * d + N) % 7;
// Decidir entre los 2 casos:
if (d + e < 10) { dia = d + e + 22; mes = 3; }
else { dia = d + e - 9; mes = 4; }
// Excepciones especiales
if (dia == 26 && mes == 4) dia = 19;
if (dia == 25 && mes == 4 && d == 28 && e == 6 && a > 10) dia = 18;
return new DateTime(anyo, mes, dia);
}
void Main()
{
DateTime
DateTime
DateTime
DateTime

domingo = GetEasterSunday(2014);
jueves = domingo.AddDays(-3);
viernes = domingo.AddDays(-2);
lunes = domingo.AddDays(+1);

//Console.WriteLine(domingo);
Console.WriteLine("Jueves Santo -> " + jueves.ToShortDateString());
Console.WriteLine("Viernes Santo -> " + viernes.ToShortDateString());
Console.WriteLine("Lunes de Pascua -> " + lunes.ToShortDateString());
}
Esta es la salida al ejecutar el cdigo anterior.
// Jueves Santo -> 17/04/2014
// Viernes Santo -> 18/04/2014
// Lunes de Pascua -> 21/04/2014

/////////////////////////////////////////////////////

Create function F_CALCULA_DOMINGO_PASCUA(in @A_ANO integer)


returns date
begin
--- @LD_FECHA= VARIABLE QUE RETORNA LA FUNCIN.
declare @LD_FECHA date;
declare @A integer;
declare @B integer;
declare @C integer;
declare @D integer;
declare @E integer;
declare @M integer;
declare @N integer;
-- PROCESO DE LA FUNCIN:
if @A_ANO>=1583 and @A_ANO<=1699 then
set @M=22;
set @N=2
elseif @A_ANO>=1700 and @A_ANO<=1799 then
set @M=23;
set @N=3
elseif @A_ANO>=1800 and @A_ANO<=1899 then
set @M=23;
set @N=4
elseif @A_ANO>=1900 and @A_ANO<=2099 then
set @M=24;
set @N=5
elseif @A_ANO>=2100 and @A_ANO<=2199 then
set @M=24;
set @N=6
elseif @A_ANO>=2200 and @A_ANO<=2299 then
set @M=25;
set @N=0
end if;
set @A=MOD(@A_ANO,19);
set @B=MOD(@A_ANO,4);
set @C=MOD(@A_ANO,7);
set @D=MOD(((19*@A)+@M),30);
set @E=MOD(((2*@B)+(4*@C)+(6*@D)+@N),7);
--CLCULO DE FECHA RELATIVA.
if(@D+@E)<10 then
-- SE RESTA 1 (22 DIAS -1) PORQUE SE TOMA COMO BASE EL 1RO. DE MARZO.
set @LD_FECHA=DAYS("DATE"(STRING(@A_ANO)+'/03/01'),((@D+@E)+(22-1)))
else
-- SE RESTA 1 (9 DIAS -1) PORQUE SE TOMA COMO BASE EL 1RO. DE ABRIL.
set @LD_FECHA=DAYS("DATE"(STRING(@A_ANO)+'/04/01'),(((@D+@E)-9)-1))
end if;
if @LD_FECHA="DATE"(STRING(@A_ANO)+'/04/26') then
set @LD_FECHA="DATE"(STRING(@A_ANO)+'/04/19')
elseif @LD_FECHA="DATE"(STRING(@A_ANO)+'/04/25') and @D=28 and @E=6 and @A>10
then
set @LD_FECHA="DATE"(STRING(@A_ANO)+'/04/18')
end if;
return(@LD_FECHA)
end

Você também pode gostar