Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public static class HollyDays
- {
- #region Propiedades
- //Propiedades publicas
- public static int Ano = DateTime.Now.Year;
- public static DateTime DomingoPascua
- {
- get
- {
- return GetDomingoDePascua(Ano);
- }
- } //easter
- #endregion
- #region Metodos
- /// <summary>
- /// Calcula Easter
- /// </summary>
- /// <param name="year"></param>
- /// <returns></returns>
- public static DateTime GetDomingoDePascua(int? _year)
- {
- int year;
- if (!_year.HasValue)
- {
- year = DateTime.Now.Year;
- }
- else
- year = _year.Value;
- int day = 0;
- int month = 0;
- int g = year % 19;
- int c = year / 100;
- int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
- int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));
- day = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
- month = 3;
- if (day > 31)
- {
- month++;
- day -= 31;
- }
- return new DateTime(year, month, day);
- }
- /// <summary>
- /// Calcula el proximo lunes
- /// </summary>
- /// <param name="festivo"></param>
- /// <returns>El proximo lunes</returns>
- static DateTime CalculaEmiliani(DateTime festivo)
- {
- DateTime FestivoEmiliani = festivo;
- int dia = (int)festivo.DayOfWeek;
- switch (dia)
- {
- case 0: FestivoEmiliani = festivo.AddDays(1); break; //domingo
- case 1: return FestivoEmiliani; //lunes
- case 2: FestivoEmiliani = festivo.AddDays(6); break; //martes
- case 3: FestivoEmiliani = festivo.AddDays(5); break; //miercoles
- case 4: FestivoEmiliani = festivo.AddDays(4); break; //jueves
- case 5: FestivoEmiliani = festivo.AddDays(3); break; //viernes
- case 6: FestivoEmiliani = festivo.AddDays(2); break; //sabado
- default: return new DateTime(); break;
- }
- if (festivo <= FestivoEmiliani)
- {
- return FestivoEmiliani;
- }
- else
- {
- throw new InvalidOperationException("No se pudo calcular el festivo, a partir del parametro");
- }
- }
- #endregion
- public static class Colombia
- {
- public static List<KeyValuePair<string, DateTime>> Festivos
- {
- get
- {
- List<KeyValuePair<string, DateTime>> lst = new List<KeyValuePair<string, DateTime>>();
- //PropertyInfo[] fs = GetProperties(typeof(Colombia));
- Type t = typeof(Colombia);
- PropertyInfo[] fs = t.GetProperties(BindingFlags.Static | BindingFlags.Public);
- for (int i = 1; i < fs.Length; i++)
- {
- lst.Add(new KeyValuePair<string, DateTime>
- (
- fs[i].Name, (DateTime)(fs[i].GetValue(t, null))
- ));
- }
- return lst.OrderBy(l =>l.Value).ToList();
- }
- }
- #region Dias Festivos
- //fijos
- public static DateTime PrimeroDeEnero { get { return new DateTime(Ano, 1, 1); } } // Primero de Enero
- public static DateTime DiaDelTrabajo { get { return new DateTime(Ano, 5, 1); } } // Dia del Trabajo 1 de Mayo
- public static DateTime Independencia { get { return new DateTime(Ano, 7, 20); } } // Independencia 20 de Julio
- public static DateTime BatallaBoyaca { get { return new DateTime(Ano, 8, 7); } } // Batalla de Boyacá 7 de Agosto
- public static DateTime MariaInmaculada { get { return new DateTime(Ano, 12, 8); } } // Maria Inmaculada 8 diciembre (religiosa)
- public static DateTime Navidad { get { return new DateTime(Ano, 12, 25); } } // Navidad 25 de diciembre
- //emiliani http://es.wikipedia.org/wiki/Raimundo_Emiliani_Rom%C3%A1n
- public static DateTime ReyesMagos { get { return CalculaEmiliani(new DateTime(Ano, 1, 6)); } } // Reyes Magos Enero 6
- public static DateTime SanJose { get { return CalculaEmiliani(new DateTime(Ano, 3, 19)); } } // San Jose Marzo 19
- public static DateTime SanPedroYSanPablo { get { return CalculaEmiliani(new DateTime(Ano, 6, 29)); } } // San Pedro y San Pablo Junio 29
- public static DateTime Asuncion { get { return CalculaEmiliani(new DateTime(Ano, 8, 15)); } } // Asunción Agosto 15
- public static DateTime DescubreAmerica { get { return CalculaEmiliani(new DateTime(Ano, 10, 12)); } } // Descubrimiento de América Oct 12
- public static DateTime TodosLosSantos { get { return CalculaEmiliani(new DateTime(Ano, 11, 1)); } } // Todos los santos Nov 1
- public static DateTime IndependenciaCartagena { get { return CalculaEmiliani(new DateTime(Ano, 11, 11)); } } // Independencia de Cartagena Nov 11
- //otras fechas calculadas a partir de la pascua.
- public static DateTime JuevesSanto { get { return DomingoPascua.AddDays(-3); } } //jueves santo
- public static DateTime ViernesSanto { get { return DomingoPascua.AddDays(-2); } } //viernes santo
- //estos son emiliani
- public static DateTime Ascención { get { return CalculaEmiliani(DomingoPascua.AddDays(43)); } } //Ascención el Señor pascua
- public static DateTime CorpusCristi { get { return CalculaEmiliani(DomingoPascua.AddDays(64)); } } //Corpus Cristi
- public static DateTime SagradoCorazón { get { return CalculaEmiliani(DomingoPascua.AddDays(71)); } } //Sagrado Corazón
- // otras fechas importantes que no son festivos
- // $this->otrasFechasCalculadas(-46); // Miércoles de Ceniza
- // $this->otrasFechasCalculadas(-46); // Miércoles de Ceniza
- // $this->otrasFechasCalculadas(-48); // Lunes de Carnaval Barranquilla
- // $this->otrasFechasCalculadas(-47); // Martes de Carnaval Barranquilla
- #endregion
- }
- }
- //Algo asi es como la usas
- static void Main(string[] args)
- {
- HollyDays.Ano = 2015;
- DateTime pascua = HollyDays.DomingoPascua;
- DateTime primero = HollyDays.Colombia.PrimeroDeEnero;
- DateTime juevesSanto = HollyDays.Colombia.JuevesSanto;
- //obtengo todos los dias festivos
- foreach (var item in HollyDays.Colombia.Festivos)
- {
- Console.WriteLine("Festivo: {0} - Fecha : {1}", item.Key, item.Value);
- }
- Console.ReadKey();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement