Feedback

C# - Und nochmal eine Feiertagsberechnung

Veröffentlicht von am 12.11.2006
(2 Bewertungen)
Jedoch kann bei dieser Feiertagsberechnung das jeweilige Land mit berücksichtigt werden
GFU-Schulungen  [Anzeige]

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.

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

Nach Teilnahme an dieser Schulung kennen Sie alle wesentlichen Funktionen des TFS für Entwickler. Sie setzen Software-Entwicklung mit dem Visual Studio Team Foundation Server erfolgreich um.

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
    }
}

Abgelegt unter Feiertage, Osterformel.

Kommentare zum Snippet

 

Logge dich ein, um hier zu kommentieren!