Feedback

C# - Feiertagsberechnung

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

Visual Studio Team Foundation Server 2017/2015 (TFS) für Administratoren - Kompakt

Nach dieser Schulung beherrschen Sie die Grundlagen des TFS. Sie erledigen administrative Aufgaben schnell und sicher.

VB.NET Komplett

Sie stehen vo der Aufgabe, individuelle Anwendungen für Windows zu schreiben. Hier ist VB.NET die optimale Sprache. Sie erlernt sich recht leicht und passt sich komplett in die .NET Umgebung von Microsoft ein. Nach der Schulung entwickeln Sie anwenderfreundliche Programme in VB.NET . Mit den objektorientierten Modellen in VB.NET erzeugen Sie außerdem wiederverwendbare Komponenten.

/// <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!