ERLEDIGT
NEIN
NEIN
ANTWORTEN
15
15
ZUGRIFFE
602
602
EMPFEHLEN
-
20.05.10 15:04 #1elekk11 Tutorials.de Gastzugang
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 ?
-
Ja:
Code :1 2 3 4 5 6 7 8 9
case 1: case 3: case 5: // code goes here break; case 2: case 4: // code goes here break;
-
20.05.10 15:26 #3elekk11 Tutorials.de Gastzugang
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
-
Und denke auch an die Schaltjahre
Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons
Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.
-
20.05.10 15:36 #5elek11 Tutorials.de Gastzugang
Waak, gut das dus sagst, die hät ich vergessen !
Muss ich jetzt erstmal bissi googeln wie man die berechnet
Danke !
-
20.05.10 15:56 #6
- Registriert seit
- Jul 2004
- Ort
- Deutschland
- Beiträge
- 95
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...
Code csharp:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
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ß
-
20.05.10 16:09 #7elekk11 Tutorials.de Gastzugang
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."Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
-- Bernd das Brot
-
"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
21.05.10 10:13 #10elekk11 Tutorials.de Gastzugang
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 ?
-
Da verstehe ich das Problem nicht ganz. Wenn du mit Hilfe des Date-Members immer dafür sorgst, dass die Uhrzeit "00:00:00" ist, sollte das doch beim Vergleichen kein Problem sein?
Gruß
MCoder"The three chief virtues of a programmer are: Laziness, Impatience and Hubris."
--- Larry Wall
-
Naja, du hast ja String-Werte in der Datenbank...
Der To-String-Befehl würde dir wieder einen String im Stil von 17.02.1983 ausgeben. Guck dir dazu mal die Format-Strings auf der MSDN-Seite an.Code :1 2
DateTime date = DateTime.parse("17.02.1983"); DateTime.ToString("dd.MM.yyyy").ToString("dd.MM.yyyy");
Damit kannst du dann auch in der Datenbank vergleichen."Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
-- Bernd das Brot
-
21.05.10 11:45 #13elekk11 Tutorials.de Gastzugang
Hallo,
das dachte ich auch, weil im INSERT in die Datenbank schneidet er die 00:00:00 Uhrzeit auch ab.
Aber in der WHERE Klausel beim UPDATE der Tabelle scheinbar nicht, aufjedenfall stürzt er mir immer mit der Meldung:
"Datentypen in Kriterienausdruck unverträglich"
Das heißt für mich irgendwie das es nicht zusammenpasst.
-
Hm, du kannst ja nachgucken. Was ist den der Datenbankdatentyp?
"Wenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke von Todesangst, nicht weit weg von Irrwitz und Idiotie!"
-- Bernd das Brot
-
21.05.10 12:08 #15elekk11 Tutorials.de Gastzugang
Hallo,
der Datenbanktyp ist "Datum/Uhrzeit", nicht "Text". Handelt sich übrigens um eine MS Access Datenbank.
Das heißt wenn ich in C# das DateTime in String konvertiere knallts beim UPDATE der DB genauso, weil "Datum/Uhrzeit" der DB nicht mit dem String zusammenpassen. Ich fasse also zusammen:
Ein String aus C# geht nicht weils vom Typ nicht mit "Datum/Uhrzeit" der Datenbank zusammenpasst.
Das DateTime Objekt aus C# geht auch nicht, weil da noch die Uhrzeit dranhängt (auch wenn sie nur 00:00:00 ist) und das passt der Datenbank auch nicht.
Ich habe jetzt eine andere Lösung gefunden das ich das DateTime Objekt in einen String wandle und diesen dann im UPDATE Befehl für die Datenbank künstlich wieder auf einen "Datum/Uhrzeit" Typ umbiege mit dem die Datenbank was anfangen kann:
string date = today.ToShortDateString();
string updateStatement = "UPDATE ZE SET Gehen = '" + today.TimeOfDay + "' WHERE ZE.Datum = #" + date.Substring(0, 2) + "/" + date.Substring(3, 2) + "/" + date.Substring(6, 4) + "#";
Funktioniert zwar, finde ich aber alles andere als schön. Verstehe nicht wieso es in .NET keine reinen Date Typ gibt
Ähnliche Themen
-
update mit einem case
Von karni im Forum Relationale DatenbanksystemeAntworten: 1Letzter Beitrag: 16.07.07, 08:48 -
Upper Case/Lower Case
Von EriFo im Forum VisualStudio & MFCAntworten: 6Letzter Beitrag: 03.02.05, 11:35 -
Mehrere PDFs in einem
Von Horusab im Forum ASPAntworten: 0Letzter Beitrag: 21.04.04, 14:22 -
case 'char' mit mehr als einem Zeichen
Von Kimble im Forum C/C++Antworten: 23Letzter Beitrag: 11.05.03, 19:08 -
4 Fälle scrollen in Delphi 6
Von RedRockeR im Forum Delphi, Kylix, PascalAntworten: 2Letzter Beitrag: 04.05.03, 12:59





Zitieren


Login





