¿Cuándo es la Semana Santa? ¿Y la Feria?
Una de las preguntas más frecuentes que nos hacemos al finalizar un año es en qué fechas caen las vacaciones del siguiente. Nos queremos planificar el año, o bien comprobar si va a ser un año con muchos “puentes”. La mayoría de las fiestas tiene una fecha fija, de manera que es muy fácil localizarlas en el calendario. Sin embargo, otras como la Semana Santa o la Feria de Sevilla no son tan directas. Casi nadie atina.
El asunto de la Feria de Sevilla es relativamente sencillo. Todo el mundo sabe que la Feria de Sevilla es en abril (por aquello de la Feria de Abril). Exactamente el Alumbrado se realiza el lunes siguiente al segundo domingo después de Pascua de Resurreción. Osea, entre la Semana Santa y la Feria de Sevilla hay dos semanas completas. Como tiene que ser en abril, existe una excepción: En el caso de que la Pascua sea más allá del dia 16 de abril, la Feria se adelanta los días necesarios para que al menos el Lunes de Feria caiga en abril. Esto es así porque al sumar 15 días al 16 de abril nos plantamos en el 1 de mayo, lo que provocaría que ningún día de la Feria estuviera en abril (oh!, sacrilegio!).
Claro que si no sabemos cuando es la Semana Santa, tampoco sabremos cuando es la Feria. Para calcular la fecha de la Semana Santa necesitaremos unos cálculos un poco más complicados. La fecha varía cada año en función del calendario lunar, y para su cálculo hacen falta la siguientes reglas:
- La Pascua de Resurreción será siempre en domingo (esto es el Domingo de Resurrección)
- El domingo sera posterior a la primera luna llena después del equinocio de primavera (21 de Marzo, por simplificar).
- Si el domingo coincide con la luna llena, se traslada al siguiente. Para no coincidir con la Pascua Judia.
Calcularlo a ojo no es fácil. Carl Fiedrich Gauss creó un sencillo algoritmo para el cálculo de la Pascua de Resurrección (Computus) :
Constantes:
- A: Año del cálculo
- M: 24 (para A entre 1900 y 2100)
- N: 5 (para A entre 1900 y 2100)
Variables:
- a: Resto de A entre 19. O “A mod 19“.
- b: A mod 4
- c: A mod 7
- d: (19a+M) mod 30
- e: (2b + 4c + 6d + N) mod 7
Cuando d+e sea menor que 10 la Pascua caerá el (d + e + 22) de marzo. En otro caso será el (d + e – 9) de abril.
Existen dos excepciones:
- Si la fecha obtenida es el 26 de abril, la Pascua será el 19 de abril.
- Si la fecha obtenida es el 25 de abril, d = 28, e = 6, y a > 10 entonces será el 18 de abril.
Otro método, el de Meeus/Jones/Butcher, no tiene excepciones, pero es algo más complejo:
Teniendo en cuenta que todos los cocientes se truncan a enteros, tenemos las siguientes variables:
- a: A mod 19 (Número de oro)
- b: A / 100 (Siglo)
- c: A mod 100 (Año en el siglo)
- d: b/4 (Número de ciclo gregoriano)
- e: b mod 4 (Año del ciclo gregoriano)
- f: (b + 8 ) / 25
- g: (b – f + 1) / 3
- h: (19 × a + b – d – g + 15) mod 30 (Epacta)
- i: c/4
- k: c mod 4
- L: (32 + 2 × e + 2 × i – h – k) mod 7
- m: (a + 11 × h + 22 × L) / 451
El més se calcula con (h + L – 7 × m + 114) / 31.
El día se calcula con ((h + L – 7 × m + 114) mod 31) + 1.
Implementaciones:
C#
[code lang=”csharp”]
using System;
using System.Collections.Generic;
using System.Text;
namespace EasterDay
{
class Program
{
static void Main(string[] args)
{
int year=0;
if (args.Length < 1 || args[0] == null || !int.TryParse(args[0], out year))
{
year = (int)DateTime.Now.Year;
}
Console.WriteLine(“The result date is:”);
DateTime easter=GetEaster(year);
Console.WriteLine(“Easter is at ” + easter.ToShortDateString());
Console.WriteLine(“Holy Week begins at ” + easter.AddDays(-7).ToShortDateString() + ” (Palm Sunday)”);
Console.WriteLine(“and finishes at ” + easter.ToShortDateString() + ” (Easter Sunday)”);
}
/// <summary>
/// Returns Easter for a year.
/// </summary>
/// <param name=”year”></param>
/// <returns></returns>
static DateTime GetEaster(int year)
{
int a = year % 19;
int b = year / 100;
int c = year % 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;
DateTime result = new DateTime((int)year, mes, dia);
return result;
}
}
}
[/code]
Referencias: Wikipedia
diciembre 24th, 2013 at 7:33 pm
No me sirve asi