1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
|
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
namespace BlackDragon.FeierTage {
/// <summary>
/// Und nochmal eine Feiertagsberechnung
/// </summary>
public class FeierTage {
private List<FeierTag> feiertage = new List<FeierTag>();
public FeierTage() {
Initial();
}
/// <summary>
/// Den möglichen Feiertags anhand des Datums und des jeweiligen Bundes Landes ermitteln
/// </summary>
/// <param name="datum">Das Datum, daß zur ermittlung herrangezogen werden soll</param>
/// <param name="land">Das jeweilige Land</param>
/// <returns>Der jeweilige Feiertag als Text</returns>
public String GetFeiertag(DateTime datum, Land land) {
// Liste der Feiertage durchgehen
foreach (FeierTag f in feiertage) {
if (datum.ToShortDateString().Equals(f.GetDatum(GetOstersonntag(datum.Year)).ToShortDateString())) {
// Prüfen ob das Land enthalten ist
foreach (Land l in f.Länder) {
if (land == l) {
return f.Feiertag;
}
}
}
}
return "";
}
/// <summary>
/// Einfache Abfrage ob das übergeben Datum in dem jeweiligen Land ein Feiertag ist
/// </summary>
/// <param name="datum">Das Datum, daß zur ermittlung herrangezogen werden soll</param>
/// <param name="land">Das jeweilige Land</param>
/// <returns>Wahr oder Falsch</returns>
public Boolean IsFeiertag(DateTime date, Land land) {
return (GetFeiertag(date, land).Length > 0);
}
/// <summary>
/// Errechnet das Datum des Ostersonntags aus dem übergebenen Jahr
/// </summary>
/// <param name="int">Das Jahr in YYYY Schreibweise</param>
/// <returns>Das errechnete Datum des Ostersonnsags in dem angegebene Jahr</returns>
private DateTime GetOstersonntag(int jahr) {
int c;
int i;
int j;
int k;
int l;
int n;
int OsterTag;
int OsterMonat;
c = jahr / 100;
n = jahr - 19 * ((int)(jahr / 19));
k = (c - 17) / 25;
i = c - c / 4 - ((int)(c - k) / 3) + 19 * n + 15;
i = i - 30 * ((int)(i / 30));
i = i - (i / 28) * ((int)(1 - (i / 28)) * ((int)(29 / (i + 1))) * ((int)(21 - n) / 11));
j = jahr + ((int)jahr / 4) + i + 2 - c + ((int)c / 4);
j = j - 7 * ((int)(j / 7));
l = i - j;
OsterMonat = 3 + ((int)(l + 40) / 44);
OsterTag = l + 28 - 31 * ((int)OsterMonat / 4);
return Convert.ToDateTime(OsterTag.ToString() + "." + OsterMonat + "." + jahr);
}
/// <summary>
/// Die einzelnen möglichen Feiertage
/// kan natürlich noch erweitert werden
/// </summary>
private void Initial() {
Land[] alle = new Land[] { Land.Baden_Würtenberg, Land.Bayern, Land.Berlin, Land.Brandenburg, Land.Bremen, Land.Hamburg, Land.Hessen, Land.Mecklenburg_Vorpommern, Land.Niedersachsen, Land.Nordrhein_Westfalen, Land.Rheinland_Pfalz, Land.Saarland, Land.Sachsen, Land.Sachsen_Anhalt, Land.Schleswig_Holstein, Land.Thüringen };
feiertage.Add(new FeierTag("Neujahr","01.01", FeiertagsArt.Fester_Feiertag, alle));
feiertage.Add(new FeierTag("Heiligen Drei Könige", "06.01", FeiertagsArt.Fester_Feiertag, new Land[] { Land.Baden_Würtenberg, Land.Bayern, Land.Sachsen_Anhalt }));
feiertage.Add(new FeierTag("Karfreitag", -2, FeiertagsArt.Bewegliche_Feiertag, alle));
feiertage.Add(new FeierTag("Ostersonntag", 0, FeiertagsArt.Bewegliche_Feiertag, alle));
feiertage.Add(new FeierTag("Ostermontag", 1, FeiertagsArt.Bewegliche_Feiertag, alle));
feiertage.Add(new FeierTag("Tag der Arbeit", "01.05", FeiertagsArt.Fester_Feiertag, alle));
feiertage.Add(new FeierTag("Christi Himmelfahrt", 39, FeiertagsArt.Bewegliche_Feiertag , alle));
feiertage.Add(new FeierTag("Pfingstsonntag", 49, FeiertagsArt.Bewegliche_Feiertag, alle));
feiertage.Add(new FeierTag("Pfingstmontag", 50, FeiertagsArt.Bewegliche_Feiertag, alle));
feiertage.Add(new FeierTag("Fronleichnam", 60, FeiertagsArt.Bewegliche_Feiertag, new Land[] { Land.Baden_Würtenberg, Land.Bayern, Land.Hessen, Land.Nordrhein_Westfalen, Land.Rheinland_Pfalz,Land.Saarland}));
feiertage.Add(new FeierTag("Mariä Himmelfahrt", "15.08", FeiertagsArt.Fester_Feiertag, new Land[] { Land.Saarland }));
feiertage.Add(new FeierTag("Tag der dt. Einheit", "03.10", FeiertagsArt.Fester_Feiertag, alle ));
feiertage.Add(new FeierTag("Allerheiligen", "01.11", FeiertagsArt.Fester_Feiertag, new Land[] { Land.Baden_Würtenberg,Land.Bayern,Land.Nordrhein_Westfalen,Land.Rheinland_Pfalz,Land.Saarland }));
feiertage.Add(new FeierTag("1. Weinachtstag", "25.12", FeiertagsArt.Fester_Feiertag, alle));
feiertage.Add(new FeierTag("2. Weinachtstag", "26.12", FeiertagsArt.Fester_Feiertag, alle));
}
}
/// <summary>
/// Die eigentliche Klasse der einzelnen Feiertage
/// </summary>
internal class FeierTag {
private FeiertagsArt art;
private string feiertag;
private DateTime datum;
private string testDatum;
private int tageHinzu;
private Land[] länder;
public String Feiertag {
get {
return this.feiertag;
}
}
public DateTime Datum {
get {
return this.datum;
}
}
public Land[] Länder {
get {
return länder;
}
}
internal FeierTag(String feiertag, String testDatum, FeiertagsArt art, Land[] länder) {
this.feiertag = feiertag;
this.testDatum = testDatum;
this.tageHinzu = 0;
this.art = art;
this.länder = länder;
}
internal FeierTag(String feiertag, int tageHinzu, FeiertagsArt art, Land[] länder) {
this.feiertag = feiertag;
this.tageHinzu = tageHinzu;
this.art = art;
this.länder = länder;
}
public DateTime GetDatum(DateTime osterSonntag) {
if (this.art != FeiertagsArt.Fester_Feiertag) {
datum = osterSonntag.AddDays(this.tageHinzu);
} else {
datum = DateTime.Parse(testDatum + "." + osterSonntag.Year);
}
return DateTime.Parse(datum.Day.ToString() + "." + datum.Month.ToString() +"."+ osterSonntag.Year);
}
}
public enum Land {
Baden_Würtenberg,
Bayern,
Berlin,
Brandenburg,
Bremen,
Hamburg,
Hessen,
Mecklenburg_Vorpommern,
Niedersachsen,
Nordrhein_Westfalen,
Rheinland_Pfalz,
Saarland,
Sachsen,
Sachsen_Anhalt,
Schleswig_Holstein,
Thüringen
}
public enum FeiertagsArt {
Fester_Feiertag,
Bewegliche_Feiertag
}
}
|