Entwickler-Ecke

WPF / Silverlight - Anzahl der Arbeitstage eines Monats feststellen?


dark-destination1988 - Fr 10.06.11 09:16
Titel: Anzahl der Arbeitstage eines Monats feststellen?
Hallo Gemeinde.
benötige mal eure Hilfe. Und zwar bin ich am entwickeln einer Silverlight-Applikation. Für diese benötige ich die Arbeitstage eines Monats. Gibt es da eventuell schon vorgefertigte Funktionen? Feiertage will ich zunächst einmal herauslassen.
meine idee wäre ja den Monat durchzugehen und abzufragen ob der Tag der woche Mo-Fr ist--> dementsprechend einen Counter erhöhen.
Aber das erscheint mir etwas von hinten durch die Brust geschossen.


traceurmicha - Fr 10.06.11 11:42

Hey dark-destination1988,
Wenn ich dich richtig verstanden habe weiß ich wie du das lösen kannst.

Mit der Datetime Funktion kannst du prüfen wie viele Tage ein Monat hat und auch überprüfen was das für ein tag ist.


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
        DateTime dt = new DateTime();
            //Anzahl der Tage feststellen
            int i = DateTime.DaysInMonth(jahr,monat);

            for (int counter = 1; counter <= i; counter++)
            {
                dt = new DateTime(jahr, monat, counter);
                //Wenn der Tag kein Samstag oder Sontag ist zähle!
                if (dt.ToString("ddd") != "Sa" && dt.ToString("ddd") != "So")
                {
                    zaehler++;
                }
            }


Ich hoffe ich konnte dir helfen


thepaine91 - Fr 10.06.11 11:44

Da fehlen aber die Feiertage.
EDIT:
Sehe grade das er gesagt hat diese können rausgelassen werden. Mein Fail!


Th69 - Fr 10.06.11 12:10

Hallo traceurmicha,

anstatt der ToString()-Abfrage, solltest du besser direkt die DayOfWeek-Eigenschaft benutzen:

C#-Quelltext
1:
if (dt.DayOfWeek != DayOfWeek.Saturday && dt.DayOfWeek != DayOfWeek.Sunday)                    

(und natürlich den richtigen Operator ;-))


traceurmicha - Fr 10.06.11 12:13

Hey Th69,

Der Fehler von mir wurde korrigiert, da waren die Finger schneller als das Hirn^^
Das mit DayOfWeek kannte ich auch noch nicht, werd meine Funktion gleich mal umbauen^^


dark-destination1988 - Fr 10.06.11 14:41

nagut, dachte zwar das es da was simpleres gibt, aber das ist besser als nicht,
danke an euch


thepaine91 - Fr 10.06.11 14:55

http://msdn.microsoft.com/de-de/library/system.web.ui.webcontrols.calendarday.isweekend.aspx

Obwohl es dir in dem Zusammenhang nicht so viel bringen wird. ^^ Aber kannst dir ja die Datum Klasse ableiten und erweitern um die Funktion .isWeekend.


jaenicke - Fr 10.06.11 15:18

Google hat das alles schon fertig:
http://bloggingabout.net/blogs/jschreuder/archive/2004/11/30/1658.aspx


thepaine91 - Fr 10.06.11 15:26

Und wo bleibt dann learning by failing?


pdelvo - Mo 08.08.11 01:42

Das sieht mir alles ein bisschen hässlich aus. hier mal meine linq Variante(hab ich mal schnell hingeklatscht^^)




C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
        public static int GetWorkingDays(int year, int month)
        {
            int start = (int)new DateTime(year, month, 1).DayOfWeek;
            return (from int i in Enumerable.Range(1, DateTime.DaysInMonth(year, month))
                    where (start + i) % 7 != 0 && (start + i) % 7 != 6
                    select i).Count();
        }