Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2014
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1.    public static class HollyDays
  2.     {
  3.         #region Propiedades
  4.         //Propiedades publicas
  5.         public static int Ano = DateTime.Now.Year;
  6.         public static DateTime DomingoPascua
  7.         {
  8.             get
  9.             {
  10.                 return GetDomingoDePascua(Ano);
  11.             }
  12.         } //easter
  13.         #endregion
  14.  
  15.         #region Metodos
  16.         /// <summary>
  17.         /// Calcula Easter
  18.         /// </summary>
  19.         /// <param name="year"></param>
  20.         /// <returns></returns>
  21.         public static DateTime GetDomingoDePascua(int? _year)
  22.         {
  23.             int year;
  24.             if (!_year.HasValue)
  25.             {
  26.                 year = DateTime.Now.Year;
  27.             }
  28.             else
  29.                 year = _year.Value;
  30.  
  31.             int day = 0;
  32.             int month = 0;
  33.  
  34.             int g = year % 19;
  35.             int c = year / 100;
  36.             int h = (c - (int)(c / 4) - (int)((8 * c + 13) / 25) + 19 * g + 15) % 30;
  37.             int i = h - (int)(h / 28) * (1 - (int)(h / 28) * (int)(29 / (h + 1)) * (int)((21 - g) / 11));
  38.  
  39.             day = i - ((year + (int)(year / 4) + i + 2 - c + (int)(c / 4)) % 7) + 28;
  40.             month = 3;
  41.  
  42.             if (day > 31)
  43.             {
  44.                 month++;
  45.                 day -= 31;
  46.             }
  47.  
  48.             return new DateTime(year, month, day);
  49.         }
  50.  
  51.  
  52.         /// <summary>
  53.         /// Calcula el proximo lunes
  54.         /// </summary>
  55.         /// <param name="festivo"></param>
  56.         /// <returns>El proximo lunes</returns>
  57.         static DateTime CalculaEmiliani(DateTime festivo)
  58.         {
  59.  
  60.             DateTime FestivoEmiliani = festivo;
  61.             int dia = (int)festivo.DayOfWeek;
  62.  
  63.             switch (dia)
  64.             {
  65.                 case 0: FestivoEmiliani = festivo.AddDays(1); break; //domingo
  66.                 case 1: return FestivoEmiliani;  //lunes
  67.                 case 2: FestivoEmiliani = festivo.AddDays(6); break; //martes
  68.                 case 3: FestivoEmiliani = festivo.AddDays(5); break; //miercoles
  69.                 case 4: FestivoEmiliani = festivo.AddDays(4); break; //jueves
  70.                 case 5: FestivoEmiliani = festivo.AddDays(3); break; //viernes
  71.                 case 6: FestivoEmiliani = festivo.AddDays(2); break; //sabado
  72.                 default: return new DateTime(); break;
  73.             }
  74.  
  75.             if (festivo <= FestivoEmiliani)
  76.             {
  77.                 return FestivoEmiliani;
  78.             }
  79.             else
  80.             {
  81.                 throw new InvalidOperationException("No se pudo calcular el festivo, a partir del parametro");
  82.             }
  83.  
  84.         }
  85.         #endregion
  86.  
  87.         public static class Colombia
  88.         {
  89.            
  90.             public static List<KeyValuePair<string, DateTime>> Festivos
  91.             {
  92.                 get
  93.                 {
  94.                     List<KeyValuePair<string, DateTime>> lst = new List<KeyValuePair<string, DateTime>>();
  95.  
  96.  
  97.                     //PropertyInfo[] fs = GetProperties(typeof(Colombia));
  98.                     Type t = typeof(Colombia);
  99.                     PropertyInfo[] fs = t.GetProperties(BindingFlags.Static | BindingFlags.Public);
  100.  
  101.                     for (int i = 1; i < fs.Length; i++)
  102.                     {
  103.  
  104.                         lst.Add(new KeyValuePair<string, DateTime>
  105.                             (
  106.                                 fs[i].Name, (DateTime)(fs[i].GetValue(t, null))                            
  107.                            
  108.                             ));
  109.                     }
  110.  
  111.                     return lst.OrderBy(l =>l.Value).ToList();
  112.                 }
  113.             }
  114.  
  115.             #region Dias Festivos
  116.             //fijos
  117.             public static DateTime PrimeroDeEnero { get { return new DateTime(Ano, 1, 1); } } // Primero de Enero
  118.             public static DateTime DiaDelTrabajo { get { return new DateTime(Ano, 5, 1); } } // Dia del Trabajo 1 de Mayo
  119.             public static DateTime Independencia { get { return new DateTime(Ano, 7, 20); } } // Independencia 20 de Julio
  120.             public static DateTime BatallaBoyaca { get { return new DateTime(Ano, 8, 7); } } // Batalla de Boyacá 7 de Agosto
  121.             public static DateTime MariaInmaculada { get { return new DateTime(Ano, 12, 8); } } // Maria Inmaculada 8 diciembre (religiosa)
  122.             public static DateTime Navidad { get { return new DateTime(Ano, 12, 25); } } // Navidad 25 de diciembre
  123.  
  124.  
  125.             //emiliani  http://es.wikipedia.org/wiki/Raimundo_Emiliani_Rom%C3%A1n
  126.             public static DateTime ReyesMagos { get { return CalculaEmiliani(new DateTime(Ano, 1, 6)); } }                         // Reyes Magos Enero 6
  127.             public static DateTime SanJose { get { return CalculaEmiliani(new DateTime(Ano, 3, 19)); } }                     // San Jose Marzo 19
  128.             public static DateTime SanPedroYSanPablo { get { return CalculaEmiliani(new DateTime(Ano, 6, 29)); } }                         // San Pedro y San Pablo Junio 29
  129.             public static DateTime Asuncion { get { return CalculaEmiliani(new DateTime(Ano, 8, 15)); } }                         // Asunción Agosto 15
  130.             public static DateTime DescubreAmerica { get { return CalculaEmiliani(new DateTime(Ano, 10, 12)); } }                        // Descubrimiento de América Oct 12
  131.             public static DateTime TodosLosSantos { get { return CalculaEmiliani(new DateTime(Ano, 11, 1)); } }                        // Todos los santos Nov 1
  132.             public static DateTime IndependenciaCartagena { get { return CalculaEmiliani(new DateTime(Ano, 11, 11)); } }                         // Independencia de Cartagena Nov 11                
  133.  
  134.  
  135.             //otras fechas calculadas a partir de la pascua.
  136.  
  137.             public static DateTime JuevesSanto { get { return DomingoPascua.AddDays(-3); } }                       //jueves santo
  138.             public static DateTime ViernesSanto { get { return DomingoPascua.AddDays(-2); } }                               //viernes santo
  139.  
  140.             //estos son emiliani
  141.             public static DateTime Ascención { get { return CalculaEmiliani(DomingoPascua.AddDays(43)); } }          //Ascención el Señor pascua
  142.             public static DateTime CorpusCristi { get { return CalculaEmiliani(DomingoPascua.AddDays(64)); } }           //Corpus Cristi
  143.             public static DateTime SagradoCorazón { get { return CalculaEmiliani(DomingoPascua.AddDays(71)); } }         //Sagrado Corazón                  
  144.  
  145.             // otras fechas importantes que no son festivos
  146.  
  147.             // $this->otrasFechasCalculadas(-46);           // Miércoles de Ceniza
  148.             // $this->otrasFechasCalculadas(-46);           // Miércoles de Ceniza
  149.             // $this->otrasFechasCalculadas(-48);           // Lunes de Carnaval Barranquilla
  150.             // $this->otrasFechasCalculadas(-47);           // Martes de Carnaval Barranquilla
  151.  
  152.             #endregion
  153.  
  154.         }
  155.  
  156.     }
  157.  
  158.  
  159. //Algo asi es como la usas
  160.   static void Main(string[] args)
  161.         {
  162.  
  163.             HollyDays.Ano = 2015;
  164.             DateTime pascua = HollyDays.DomingoPascua;
  165.  
  166.             DateTime primero = HollyDays.Colombia.PrimeroDeEnero;
  167.             DateTime juevesSanto = HollyDays.Colombia.JuevesSanto;
  168.  
  169.  
  170.             //obtengo todos los dias festivos
  171.             foreach (var  item in HollyDays.Colombia.Festivos)
  172.             {
  173.                 Console.WriteLine("Festivo: {0} - Fecha : {1}", item.Key, item.Value);
  174.             }
  175.  
  176.             Console.ReadKey();
  177.  
  178.            
  179.  
  180.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement