public WorkMonth(int year, int month, GermanSpecialDays specialDays, WorkDayParserSettings parserSettings, float hoursPerDay) { this.year = year; this.month = month; this.hoursPerDay = hoursPerDay; this.Weeks = new ObservableCollection <WorkWeek>(); this.Days = new ObservableCollection <WorkDay>(); this.ShortCutStatistic = new QuickFillObservableCollection <ShortCutStatistic>(); // TODO which date should i take? this.ReloadShortcutStatistic(parserSettings.ShortCuts); var cal = CultureInfo.CurrentCulture.Calendar; WorkWeek lastWeek = null; for (int day = 1; day <= cal.GetDaysInMonth(year, month); day++) { var dt = new DateTime(year, month, day); WorkDay wd = new WorkDay(year, month, day, specialDays); this.Days.Add(wd); var weekOfYear = cal.GetWeekOfYear(dt); if (lastWeek == null || lastWeek.WeekOfYear != weekOfYear) { lastWeek = new WorkWeek(this, weekOfYear); lastWeek.PropertyChanged += new PropertyChangedEventHandler(this.WeekPropertyChanged); this.Weeks.Add(lastWeek); } lastWeek.AddDay(wd); } }
public WorkMonth(int year, int month, GermanSpecialDays specialDays, IEnumerable<ShortCut> shortCuts, float hoursPerDay) { this.year = year; this.month = month; this.hoursPerDay = hoursPerDay; this.Weeks = new ObservableCollection<WorkWeek>(); this.Days = new ObservableCollection<WorkDay>(); this.ShortCutStatistic = new ObservableCollection<KeyValuePair<string, ShortCutStatistic>>(); // TODO which date should i take? this.ReloadShortcutStatistic(shortCuts); var cal = new GregorianCalendar(); WorkWeek lastWeek = null; for (int day = 1; day <= cal.GetDaysInMonth(year, month); day++) { var dt = new DateTime(year, month, day); WorkDay wd = new WorkDay(year, month, day, specialDays); this.Days.Add(wd); var weekOfYear = cal.GetWeekOfYear(dt, CalendarWeekRule.FirstDay, DayOfWeek.Monday); if (lastWeek == null || lastWeek.WeekOfYear != weekOfYear) { lastWeek = new WorkWeek(this, weekOfYear); lastWeek.PropertyChanged += new PropertyChangedEventHandler(this.WeekPropertyChanged); this.Weeks.Add(lastWeek); } lastWeek.AddDay(wd); } }
private DayType calculateDayType(DateTime dt, DayOfWeek dayOfWeek, GermanSpecialDays specialDays, out GermanSpecialDay foundSpecialDay) { foundSpecialDay = null; if (specialDays != null) { specialDays.TryGetValue(dt, out foundSpecialDay); } if (foundSpecialDay != null) { return(DayType.Holiday); } DayType ret = DayType.Unknown; switch (dayOfWeek) { case DayOfWeek.Monday: case DayOfWeek.Tuesday: case DayOfWeek.Wednesday: case DayOfWeek.Thursday: case DayOfWeek.Friday: ret = DayType.Working; break; case DayOfWeek.Saturday: case DayOfWeek.Sunday: ret = DayType.Weekend; break; } // TODO: more calculations required... return(ret); }
public WorkDay(int year, int month, int day, GermanSpecialDays specialDays) : this() { this.year = year; this.month = month; this.day = day; var dt = new DateTime(year, month, day); var cal = new GregorianCalendar(); this.DayOfWeek = cal.GetDayOfWeek(dt); GermanSpecialDay specialDay; this.DayType = this.calculateDayType(dt, this.DayOfWeek, specialDays, out specialDay); this.SpecialDay = specialDay; }
private DayType calculateDayType(DateTime dt, DayOfWeek dayOfWeek, GermanSpecialDays specialDays, out GermanSpecialDay foundSpecialDay) { foundSpecialDay = null; if (specialDays != null) { specialDays.TryGetValue(dt, out foundSpecialDay); } if (foundSpecialDay != null) { return DayType.Holiday; } DayType ret = DayType.Unknown; switch (dayOfWeek) { case DayOfWeek.Monday: case DayOfWeek.Tuesday: case DayOfWeek.Wednesday: case DayOfWeek.Thursday: case DayOfWeek.Friday: ret = DayType.Working; break; case DayOfWeek.Saturday: case DayOfWeek.Sunday: ret = DayType.Weekend; break; } // TODO: more calculations required... return ret; }
/* Methode zur Berechnung der besonderen Tage in Deutschland */ public static GermanSpecialDays GetGermanSpecialDays(int year) { // GermanSpecialDays-Instanz erzeugen GermanSpecialDays gsd = new GermanSpecialDays(); // Die festen besonderen Tage eintragen gsd.Add(GermanSpecialDaysEnum.Neujahr, "Neujahr", new DateTime(year, 1, 1), true, true); gsd.Add(GermanSpecialDaysEnum.HeiligeDreiKönige, "Heilige Drei Könige", new DateTime(year, 1, 6), false, true); gsd.Add(GermanSpecialDaysEnum.Valentinstag, "Valentinstag", new DateTime(year, 2, 14), true, false); gsd.Add(GermanSpecialDaysEnum.Maifeiertag, "Maifeiertag", new DateTime(year, 5, 1), true, true); gsd.Add(GermanSpecialDaysEnum.MariaHimmelfahrt, "Maria Himmelfahrt", new DateTime(year, 8, 15), false, true); gsd.Add(GermanSpecialDaysEnum.TagDerDeutschenEinheit, "Tag der Deutschen Einheit", new DateTime(year, 10, 3), true, true); gsd.Add(GermanSpecialDaysEnum.Reformationstag, "Reformationstag", new DateTime(year, 10, 31), false, true); gsd.Add(GermanSpecialDaysEnum.Allerheiligen, "Allerheiligen", new DateTime(year, 11, 1), false, true); gsd.Add(GermanSpecialDaysEnum.HeiligerAbend, "Heiliger Abend", new DateTime(year, 12, 24), true, true); gsd.Add(GermanSpecialDaysEnum.ErsterWeihnachtstag, "Erster Weihnachtstag", new DateTime(year, 12, 25), true, true); gsd.Add(GermanSpecialDaysEnum.ZweiterWeihnachtstag, "Zweiter Weihnachtstag", new DateTime(year, 12, 26), true, true); // Datum des Ostersonntag berechnen DateTime easterSunday = GetEasterSundayDate(year); // Die beweglichen besonderen Tage ermitteln, die sich auf Ostern beziehen gsd.Add(GermanSpecialDaysEnum.Rosenmontag, "Rosenmontag", easterSunday.AddDays(-48), true, false); gsd.Add(GermanSpecialDaysEnum.Aschermittwoch, "Aschermittwoch", easterSunday.AddDays(-46), true, false); gsd.Add(GermanSpecialDaysEnum.Gründonnerstag, "Gründonnerstag", easterSunday.AddDays(-3), true, false); gsd.Add(GermanSpecialDaysEnum.Karfreitag, "Karfreitag", easterSunday.AddDays(-2), true, true); gsd.Add(GermanSpecialDaysEnum.Ostermontag, "Ostermontag", easterSunday.AddDays(1), true, true); gsd.Add(GermanSpecialDaysEnum.Ostersonntag, "Ostersonntag", easterSunday, true, true); gsd.Add(GermanSpecialDaysEnum.ChristiHimmelfahrt, "Christi Himmelfahrt", easterSunday.AddDays(39), true, true); gsd.Add(GermanSpecialDaysEnum.Pfingstsonntag, "Pfingstsonntag", easterSunday.AddDays(49), true, true); gsd.Add(GermanSpecialDaysEnum.Pfingstmontag, "Pfingstmontag", easterSunday.AddDays(50), true, true); gsd.Add(GermanSpecialDaysEnum.Fronleichnam, "Fronleichnam", easterSunday.AddDays(60), false, true); // Die beweglichen besonderen Tage ermitteln, die sich auf Weihnachten // beziehen // Sonntag vor dem 25. Dezember (4. Advent) ermitteln DateTime firstXMasDay = new DateTime(year, 12, 25); DateTime fourthAdvent; int weekday = (int)firstXMasDay.DayOfWeek; if (weekday == 0) { // Sonntag fourthAdvent = firstXMasDay.AddDays(-7); } else { fourthAdvent = firstXMasDay.AddDays(-weekday); } gsd.Add(GermanSpecialDaysEnum.VierterAdvent, "Vierter Advent", fourthAdvent, true, false); gsd.Add(GermanSpecialDaysEnum.DritterAdvent, "Dritter Advent", fourthAdvent.AddDays(-7), true, false); gsd.Add(GermanSpecialDaysEnum.ZweiterAdvent, "Zweiter Advent", fourthAdvent.AddDays(-14), true, false); gsd.Add(GermanSpecialDaysEnum.ErsterAdvent, "Erster Advent", fourthAdvent.AddDays(-21), true, false); // Totensonntag ermitteln DateTime deadSunday = fourthAdvent.AddDays(-28); gsd.Add(GermanSpecialDaysEnum.Totensonntag, "Totensonntag", deadSunday, true, false); // Den Mittwoch vor dem Totensonntag ermitteln weekday = (int)deadSunday.DayOfWeek; if (weekday < 4) { // Sonntag bis Mittwoch gsd.Add(GermanSpecialDaysEnum.BußUndBettag, "Buß- und Bettag", deadSunday.AddDays(-(weekday + 4)), false, true); } else { // Donnerstag bis Samstag gsd.Add(GermanSpecialDaysEnum.BußUndBettag, "Buß- und Bettag", deadSunday.AddDays(-(weekday - 3)), false, true); } // Das Ergebnis zurückgeben return(gsd); }
/// <summary> /// Berechnet die speziellen Tage für Deutschland (Nordrhein-Westfalen) /// </summary> /// <param name="year">Das Jahr, für das die speziellen Tage berechnet werden sollen</param> /// <returns>Gibt eine GermanSpecialDays-Auflistung mit den Daten der wichtigsten speziellen Tage für Deutschland zurück</returns> public static GermanSpecialDays GetGermanSpecialDays(int year) { var gsd = new GermanSpecialDays(year); // Die festen besonderen Tage eintragen gsd.Add("Neujahr", new DateTime(year, 1, 1)); gsd.Add("Maifeiertag", new DateTime(year, 5, 1)); gsd.Add("Tag der Deutschen Einheit", new DateTime(year, 10, 3)); gsd.Add("Allerheiligen", new DateTime(year, 11, 1)); gsd.Add("Heiliger Abend", new DateTime(year, 12, 24)); gsd.Add("1. Weihnachtstag", new DateTime(year, 12, 25)); gsd.Add("2. Weihnachtstag", new DateTime(year, 12, 26)); gsd.Add("Silvester", new DateTime(year, 12, 31)); // Datum des Ostersonntags berechnen var easterSunday = GetEasterSundayDate(year); // Die beweglichen besonderen Tage ermitteln, die sich auf Ostern beziehen gsd.Add("Rosenmontag", easterSunday.AddDays(-48)); gsd.Add("Karfreitag", easterSunday.AddDays(-2)); gsd.Add("Ostermontag", easterSunday.AddDays(1)); gsd.Add("Ostersonntag", easterSunday); gsd.Add("Christi Himmelfahrt", easterSunday.AddDays(39)); gsd.Add("Pfingstsonntag", easterSunday.AddDays(49)); gsd.Add("Pfingstmontag", easterSunday.AddDays(50)); gsd.Add("Fronleichnam", easterSunday.AddDays(60)); return gsd; }