Kalendarz polski

0

Siema.

Mam do zrobienia kalendarz, który będzie zliczał dni urlopu, jakie pracownik bierze.

Jest może jakaś funkcja/komponent/trick żeby on sam automatycznie wiedział kiedy są święta i dni wolne od pracy(weekendy) - z weekendami to bym samymi se poradził

po prostu chodzi o to żeby jakoś ustawić kalendarz na kalendarz jaki jest w polsce używany

Pozdro

0

Prawie wszystkie święta w naszym kraju mają stałą datę więc z czym problem? Naturalnie z tymi ruchomymi świętami też nie jest źle np. jak obliczać kiedy przypada Wielkanoc masz na Wikipedii. Nie wiem w czym masz problem - szukasz dziury w całym.

0
PcSA napisał(a)

[...]szukasz dziury w całym.

Skad, chce isc na latwizne i wrzucic komponent na forme. Matko, jakie to sie wszystko leniwe zrobilo...

@autor: Tak jak mowi przedmowca, prawie wszystkie daty swiat wystarczy sobie wrzucic do listy/tablicy + te przesuwne (chyba tylko Wielkanoc) i sprawdzac petla, ktore z nich wypadaja w dni robocze.

0

dzajdol czy udało ci sie zrobić taki kalendarz jeśli tak czy możesz podać kod lub podesłać mi robie program i kręcę się w kółko jak to zrobić taki kalendarz.

0

Masz napisane powyzej, wiec nie rozumiem w czym problem?

0

Witam.

Poniżej jest klasa pozwalająca sprawdzić, czy dany dzień jest świętem (działa poprawnie dla lat 1900-2099). Działa również dla świąt ruchomych (Wielkanoc, Boże Ciało).

    public static class HolidayCalculator
    {
        public static bool IsHoliday (this DateTime Day)
        {
            if (Day.DayOfWeek == DayOfWeek.Sunday) return true;
            if (Day.Month == 1 && Day.Day == 1) return true; // Nowy Rok
            if (Day.Month == 5 && Day.Day == 1) return true; // 1 maja
            if (Day.Month == 5 && Day.Day == 3) return true; // 3 maja
            if (Day.Month == 8 && Day.Day == 15) return true; // Wniebowzięcie Najświętszej Marii Panny, Święto Wojska Polskiego
            if (Day.Month == 11 && Day.Day == 1) return true; // Dzień Wszystkich Świętych
            if (Day.Month == 11 && Day.Day == 11) return true; // Dzień Niepodległości 
            if (Day.Month == 12 && Day.Day == 25) return true; // Boże Narodzenie
            if (Day.Month == 12 && Day.Day == 26) return true; // Boże Narodzenie
            int a = Day.Year % 19;
            int b = Day.Year % 4;
            int c = Day.Year % 7;
            int d = (a * 19 + 24) % 30;
            int e = (2 * b + 4 * c + 6 * d + 5) % 7;
            if (d == 29 && e == 6) d -= 7;
            if (d == 28 && e == 6 && a > 10) d -= 7;
            DateTime Easter = new DateTime (Day.Year, 3, 22).AddDays (d + e);
            if (Day.AddDays (-1) == Easter)
                return true; // Wielkanoc (poniedziałek)
            if (Day.AddDays (-60) == Easter)
                return true; // Boże Ciało
            return false;
        }
    }

Jest to klasa implementująca metodę rozszerzającą (od C# 3.0 w górę), dzięki czemu aby później sprawdzić dzień wystarczy np. napisać:

// Zwróci true, bo Boże Ciało
bool CzySwieto = new DateTime (2008, 5, 22).IsHoliday 

Miłego używania i pozdrawiam.

0

Errata - powyżej miało być:

// Zwróci true, bo Boże Ciało
bool CzySwieto = new DateTime (2008, 5, 22).IsHoliday ();
0

Grzegorz Sojka napisał

(działa poprawnie dla lat 1900-2099).

Na pewno nie: po pierwsze nie uwzględnia świąt, które "czekają" na uchwalenie (Trzech Króli), po drugie uważasz, że Polsce od roku 1900 1 i 3 maja były świętami ?

0

Czepiasz się.

Co do lat 1900 - ... miałem na myśli obliczenia dnia Wielkanocy. A co do świąt czekających, to po pierwsze Trzech Króli zostało AFAIK odrzucone przez naszą władzę, a po drugie z takimi założeniami to równie dobrze można powiedzieć, iż metoda nie jest pewna, bo nie wiadomo, czy w 2012 nie będzie końca świata.

0
bogdans napisał(a)

Na pewno nie: po pierwsze nie uwzględnia świąt, które "czekają" na uchwalenie (Trzech Króli), po drugie uważasz, że Polsce od roku 1900 1 i 3 maja były świętami ?
To może się zdziwisz, ale 1. maja był świętem w Polsce nawet przed 1900 rokiem.

Dla malkontentów wersja uwzględniająca zaszłości historyczne z wyjątkiem II Wojny Światowej. Oczywiście koledze bogdans to pewnie nie wystarczy, bo metoda nie antycypuje zmian prawnych w przyszłości.

    public static class HolidayCalculator
    {
        public static bool IsHoliday (this DateTime Day)
        {
            if (Day.DayOfWeek == DayOfWeek.Sunday) return true;
            if (Day.Month == 01 && Day.Day == 01) return true; // Nowy Rok
            if (Day.Month == 01 && Day.Day == 01 && (Day.Year >= 1952 && Day.Year <= 1960)) return true; // Trzech Króli
            if (Day.Month == 05 && Day.Day == 01) return true; // 1 maja
            if (Day.Month == 05 && Day.Day == 03 && (Day.Year >= 1918 && Day.Year <= 1950 || Day.Year >= 1990)) return true; // 3 maja
            if (Day.Month == 07 && Day.Day == 22 && (Day.Year >= 1945 && Day.Year <= 1989)) return true; // Narodowe Święto Odrodzenia Polski
            if (Day.Month == 08 && Day.Day == 15 && (Day.Year <= 1960 || Day.Year >= 1989)) return true; // Wniebowzięcie Najświętszej Marii Panny, Święto Wojska Polskiego (rocznica “cudu nad Wisłą”)
            if (Day.Month == 11 && Day.Day == 01) return true; // Dzień Wszystkich Świętych
            if (Day.Month == 11 && Day.Day == 11 && (Day.Year == 1937 || Day.Year == 1938 || Day.Year >= 1990)) return true; // Dzień Niepodległości 
            if (Day.Month == 12 && Day.Day == 25) return true; // Boże Narodzenie
            if (Day.Month == 12 && Day.Day == 26) return true; // Boże Narodzenie
            int a = Day.Year % 19;
            int b = Day.Year % 4;
            int c = Day.Year % 7;
            int d = (a * 19 + 24) % 30;
            int e = (2 * b + 4 * c + 6 * d + 5) % 7;
            if (d == 29 && e == 6) d -= 7;
            if (d == 28 && e == 6 && a > 10) d -= 7;
            DateTime Easter = new DateTime (Day.Year, 3, 22).AddDays (d + e);
            if (Day.AddDays (-1) == Easter)
                return true; // Wielkanoc (poniedziałek)
            if (Day.AddDays (-60) == Easter)
                return true; // Boże Ciało
            return false;
        }
    }

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0