¿Cuando caerá la Semana Santa del año que viene?
Pues es algo que siempre he querido tener un algoritmo que me lo resuelva, pero como no he tenido la necesidad, no me he puesto con ello nunca. El caso es que me he topado con este artículo que me lo da hecho y, que se le va a hacer, no voy a reinventar la rueda, sino anotar aquí el enlace y copiarme el código de interés:
Para saber en qué se basan estos cálculos podéis googlear "tablas epactas semana santa", yo he encontrado un par de artículos interesantes sobre el orígen de estos cálculos. ¡Que curioso que, al final, la Iglesia base el día de la Semana Santa en el año lunar!
Saludos
1: using System;2:3: namespace JnSoftware.Calculos4: {5:6: /// <summary>7: /// Cálculo de Semana Santa8: /// </summary>9: public class SemanaSanta10: {11:12: #region Campos13: private int a;14: private int b;15: private int c;16: private int d;17: private int e;18: private DateTime pascuaResurreccion;19:20: private int anio;21:22: #endregion23:24: /// <summary>25: /// Constructor de la clase26: /// </summary>27: /// <param name="anio">Entero que representa el año del que28: /// se quiere calcular la semana santa.</param>29: /// <exception cref="ArgumentOutOfRangeException">30: /// Se produce cuando se intenta calcular31: /// la semana santa de un año no contemplado.</exception>32: public SemanaSanta(int anio)33: {34: try35: {36: this.anio = anio;37: calculaDomingoPascua();38: }39: catch { throw; }40: }41:42: /// <summary>43: /// Cálculo del domingo de Pascua o domingo de Resurrección.44: /// </summary>45: private void calculaDomingoPascua()46: {47: ParConstantes p = getPar(anio);48: a = anio % 19;49: b = anio % 4;50: c = anio % 7;51: d = (19 * a + p.M) % 30;52: e = (2 * b + 4 * c + 6 * d + p.N) % 7;53:54: if (d + e < 10)55: pascuaResurreccion = new DateTime(anio, 3, d + e + 22);56: else57: pascuaResurreccion = new DateTime(anio, 4, d + e - 9);58:59: // Excepciones60: if (pascuaResurreccion == new DateTime(anio, 4, 26))61: pascuaResurreccion = new DateTime(anio, 4, 19);62:63: if (pascuaResurreccion == new DateTime(anio, 4, 25)64: && d == 28 && e == 6 && a > 10)65: pascuaResurreccion = new DateTime(anio, 4, 18);66: }67:68: #region Constantes cálculo69: private struct ParConstantes70: {71: public int M { get; set; }72: public int N { get; set; }73: }74:75: private ParConstantes getPar(int anio)76: {77: ParConstantes p = new ParConstantes();78: if (anio < 1583)79: {80: throw81: new ArgumentOutOfRangeException82: ("El año deberá ser superior a 1583");83: }84: else if (anio < 1700) { p.M = 22; p.N = 2; }85: else if (anio < 1800) { p.M = 23; p.N = 3; }86: else if (anio < 1900) { p.M = 23; p.N = 4; }87: else if (anio < 2100) { p.M = 24; p.N = 5; }88: else if (anio < 2200) { p.M = 24; p.N = 6; }89: else if (anio < 2299) { p.M = 25; p.N = 0; }90: else91: {92: throw93: new ArgumentOutOfRangeException94: ("El año deberá ser inferior a 2299");95: }96: return p;97: }98: #endregion99:100: #region Propiedades públicas101:102:103:104: public DateTime MiercolesCeniza105: {106: get { return SabadoSanto.AddDays(7 * -6 - 3); }107: }108:109: public DateTime ViernesDolores110: {111: get { return pascuaResurreccion.AddDays(-9); }112: }113:114: public DateTime DomingoRamos115: {116: get { return pascuaResurreccion.AddDays(-7); }117: }118:119: public DateTime JuevesSanto120: {121: get { return pascuaResurreccion.AddDays(-3); }122: }123:124: public DateTime ViernesSanto125: {126: get { return pascuaResurreccion.AddDays(-2); }127: }128:129: public DateTime SabadoSanto130: {131: get { return pascuaResurreccion.AddDays(-1); }132: }133:134: public DateTime DomingoResurreccion135: {136: get { return pascuaResurreccion; }137: }138:139: #endregion140:141: }142: }
Para saber en qué se basan estos cálculos podéis googlear "tablas epactas semana santa", yo he encontrado un par de artículos interesantes sobre el orígen de estos cálculos. ¡Que curioso que, al final, la Iglesia base el día de la Semana Santa en el año lunar!
- http://www.ribagorza.com/asp/articulover.asp?ID=30
- https://sites.google.com/a/solorzano.org/pochomil/home/mareas-calculo-
Saludos
Comentarios
http://www.elavefenix.net/ficheros/Calendario.zip