Mehrere Fälle in einem case

E

elekk11

Hallo,

ich möchte prüfen ob ein Tag zwischen 28 und 31 zum aktuellen Monat passt. Heißt wenn eine 31 kommt, wir aber derzeit Februar haben, stimmt was nicht.
Dafür hab ich ein simples switch hergenommen:

switch(DataTime.Now.Month)
{
case 1: //Januar
//Do Something
break;
case 2: //Februar
//Do Something
break;

.
.
.
.
}

12 cases sind viel, sieht nicht schön aus, ist nen Hauden Schreibarbeit UND das schlimmste ist das ein und derselve Code zigmal vorkommt.
Gibt es denn eine Möglichkeit mehrere Fälle mit einem case abzudecken ? Weil im Grunde brauch ich ja nur 3 cases (Monate mit 31, 30 und 28 Tagen).

Hab schon versucht:

case: 1, 3, 5, 7, 8, 10, 12

oder:

case: 1 || 3 || 5 || 7 .......

oder:

case: 1 || case: 2 || case: 3 ......

Geht aber alles nicht. Muss ich da jetzt echt 12 cases machen wovon in 7 zBsp derselbe Code steht ? Ist das nicht ein wenig redundant ?
 
Ahh, doch alle 12 cases aber in der Reihenfolge in der sie zusammengehören und nur jeweils im Letzten den Code.

Da muss man auch erst draufkommen, ich danke dir :)
 
Waak, gut das dus sagst, die hät ich vergessen !

Muss ich jetzt erstmal bissi googeln wie man die berechnet :)

Danke !
 
Hallo,

da musst du doch nicht viel berechnen. Die DateTime und TimeSpan Klassen nehemn dir viel Arbeit ab und wenn ich mich nicht irre berücksichtigt die DateTime Klasse auch das Schaltjahr. Aber wie gesagt so ganz sicher bin ihc mir da jetzt nicht. Und was genau willst du eigentlich berechnen? Wenn du jetzt als Beispiel die Jahre, Monate, Tage zwischen zwei Daten berechnen willst könnte das zB so aussehen...

C#:
private struct DateDiff
{
    public int years, months, days;
}

private DateDiff calcDateDiff(DateTime d1, DateTime d2)
{
        int years, months, days;
        years = d2.Year - d1.Year;
        DateTime dt = d1.AddYears(years);
        if (dt > d2)
        {
            years--;
            dt = d1.AddYears(years);
        }
        months = d2.Month - d1.Month;
        if (d2.Day < d1.Day) months--;
        months = (months + 12) % 12;
        dt = dt.AddMonths(months);
        days = (d2 - dt).Days;
        DateDiff ddf;
        ddf.years = years; 
        ddf.months = months; 
        ddf.days = days;
        return (ddf);
}


Allerdings solltest du dich vorher selbst vergewissern ob alles richtig ist. Ich lege meine hand nicht ins Feuer ;)

Gruß
 
Ich schreibe mir einen eigenen kleinen Geburtstagsreminder in den ich Daten eintragen kann und er dann jedesmal beim Windowsstart prüft ob in den nächsten 7 Tagen was anliegt und entsprechend ein Fenster aufpoppt oder eben nicht.

Die DateTime Objekte sind echt toll, das Problem ist nur das die Daten in einer Datenbank liegen und dort als "Text" gespeichert sind. Und ein DateTime Objekt gegen einen String vergleichen geht ja nicht, zumindest hab ichs nicht hinbekommen. Daher hab ich jetzt alles in Strings zerlegt und prüfe so.

Geht ganz gut, etwas fisselig wirds erst wenn der nächste Geburtstag zBsp 5Tage entfernt liegt und dazu ein Monatswechsel stattfindet, weil dann muss ich ja wissen wieviele Tage der aktuelle Monat gerade hat, daher das switch :)
 
Guck dir mal die 2 Methoden DateTime.Parse und DateTime.TryParse an. Das nimmt dir da auch ziemlich Ärbeit ab.Z.B. zerlegen von irgendwelchen Strings.
Da müsste es auch was geben, damit du angeben kannst, in welchen Formaten die Strings vorliegen. Guck dir dazu mal Formatstrings an. Dürfte alles in der MSDN-Library beschrieben sein.
 
Hi, danke für den Tip, so ist meine Klasse um die Hälfte geschrumpft :)

Da ich jetzt aber ganz auf DateTime Objekte umgestiegen bin und auch die Datenbank auf Datum umgestellt habe statt auf Text, hab ich ein anderes Problem.
DateTime Objekte besitzen ja immer (wie der Name schon sagt) Datum UND Uhrzeit.
Selbst:

DateTime today = DateTime.Now.Date

ergibt: {21.05.2010 00:00:00}

Ich muss in meiner Datenbank jetzt aber nach einem Datum suchen und das geht dann grundsätzlich schief. Hab jetzt ne Weile gegoogelt und es scheint wirklich keinerlei Date Typ ind .NET zu geben.
Bleibt mir jetzt doch wieder nur der Weg über Stringbastelei ?
 

Neue Beiträge

Zurück