View difference between Paste ID: 1XSPeJtr and b9rpbcXB
SHOW: | | - or go back to the newest paste.
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-
    }
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
        }