コード例 #1
0
        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);
            }
        }
コード例 #2
0
ファイル: WorkMonth.cs プロジェクト: vipwolf/moni
        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);
              }
        }
コード例 #3
0
        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);
        }
コード例 #4
0
ファイル: WorkDay.cs プロジェクト: vipwolf/moni
 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;
 }
コード例 #5
0
        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;
        }
コード例 #6
0
ファイル: WorkDay.cs プロジェクト: vipwolf/moni
        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;
        }
コード例 #7
0
ファイル: DateUtil.cs プロジェクト: muhliz25/cs-codebook
        /* 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);
        }
コード例 #8
0
ファイル: SpecialDaysUtils.cs プロジェクト: vipwolf/moni
        /// <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;
        }