Feedback

C# - Feiertagsberechnung

Veröffentlicht von am 02.11.2006
(7 Bewertungen)
Eine Feiertagsberechnung aufgrund der Osterformel
GFU-Schulungen  [Anzeige]

VB.NET 2017/2015/2013 Einführung

Das Seminar befähigt Sie zur eigenständigen Entwicklung von anwenderorientierten Programmen in VB.NET, worin auch der Einsatz von Datenbanken enthalten ist.

ASP.NET 2.0 und 3.5

Dieser Kurs vermittelt Ihnen alle Erweiterungen von Microsoft ASP.NET 2.0. Zu diesen zählen u. a. Data Bindung, Master Pages, und Security.

/// <summary>
/// Teste das übergeben Datum auf einen Feiertag
/// </summary>
/// <param name="DateTime">Das Datum, daß auf einen Beweglichen Feiertag geprüft werden soll</param>
/// <returns>Wenn das übergebene Datum auf einen Feriertag fällt dan wird dieser Feiertag zurückgegeben</returns>
public string GetFeiertag(DateTime myDatum){
	string feierTag = "";
	
	// Datum zerlegen und für den Test eines FEsten Feiertages zusammenbauen
	String testDate = (myDatum.Day.ToString() +"/"+ myDatum.Month.ToString());
	
	switch(testDate){
		case "1/1":
			feierTag = "Neujahr";
			break;
		case "1/5":
			feierTag = "Tag der Arbeit";
			break;
		case "15/8":
			feierTag = "Mariae Himmelfahrt";
			break;
		case "3/10":
			feierTag = "Tag der dt. Einheit";
			break;
		case "1/11":
			feierTag = "Allerheiligen";
			break;
		case "25/12":
			feierTag = "1. Weihnachtstag";
			break;
		case "26/12":
			feierTag = "2. Weihnachtstag";
			break;
		default:
			feierTag = GetMovFeierTag(myDatum);
			break;
	}
	
	return feierTag;
}

/// <summary>
/// Teste das übergeben Datum auf einen Beweglichen Feiertag
/// </summary>
/// <param name="DateTime">Das Datum, daß auf einen Beweglichen Feiertag geprüft werden soll</param>
/// <returns>Der bewegliche Feiertag oder halt nichts</returns>
private String GetMovFeierTag(DateTime myDatum){			
	int Jahr = myDatum.Year;
	DateTime Ostersonntag = GetOstersonntag(Jahr);
	
	if (myDatum == Ostersonntag.AddDays(0)){
		return "OsterSonntag";
	}
	if (myDatum == Ostersonntag.AddDays(-2)){
		return "Karfreitag";
	}
	if (myDatum == Ostersonntag.AddDays(1)){
		return "Ostermontag";
	}
	if (myDatum == Ostersonntag.AddDays(39)){
		return "Christi Himmelfahrt";
	}
	if (myDatum == Ostersonntag.AddDays(49)){
		return "Pfingstsonntag";
	}
	if (myDatum == Ostersonntag.AddDays(50)){
		return "Pfingstmontag";
	}
	if (myDatum == Ostersonntag.AddDays(60)){
		return "Fronleichnam";
	}
	
	return "";
}

/// <summary>
/// Errechnet das Datum des Ostersonntags aus dem übergebenen Jahr
/// </summary>
/// <param name="int">Das Jahr in YYYY Schreibweise</param>
/// <returns>Das Datum des Ostersonntags in dem Übergebe Jahr</returns>
private DateTime GetOstersonntag(int jahr){
	DateTime OsterSonntag;
	
	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);
}

5 Kommentare zum Snippet

Yellow schrieb am 03.11.2006:
Die Feiertage in den einzelnen Bundesländer unterscheiden sich, so ist Allerheiligen beispielsweise in Hessen kein Feiertag (siehe http://de.wikipedia.org/wiki/Feiertage_%28Deutschland%29).

-yellow
BlackDragon schrieb am 04.11.2006:
Ja, das mit den Feiertagen stimmt schon aber denke mal das wäre nur eine kleine anpassung
Yellow schrieb am 07.11.2006:
Nuja... Maria Himmelfahrt ist auch nur im Saarland und in einigen Ortschaften im Bayern noch Feiertag. Pack' doch die Feiertag/Bundesland-Zuordnung in ein Array oder dergleichen... das wäre doch klasse.
Incognito schrieb am 19.12.2007:
Es gibt eine XML Web Service Seite dafür: http://www.holidaywebservice.com/Holidays/US/Dates/USHolidayDates.asmx?WSDL
Thorsten-M. schrieb am 06.03.2014:
Für den deutschsprachigen, sowie allgemein europäischen Raum befindet sich aktuell ein Webservice in der Entstehung:
http://www.feiertagskalender-service.de/

Laut dem Betreibern des Angebots ist zudem individuelles Feedback herzlich willkommen. Sehr wahrscheinlich findet man auch hier eine bequemere und garantiert richtige Lösung :)

In Datumsarithmetik & Co. hat man recht schnell einen Fehler verbaut. Je nach Anwendung kann das schon zu "hübschen" Seiteneffekten führen, die leider einen ordentlichen Schaden verursachen können
Ich spreche da aus Erfahrung :)
 

Logge dich ein, um hier zu kommentieren!