Rotti Geschrieben 14. September 2010 Geschrieben 14. September 2010 Hey! Ich habe ein Programm in dem ich auch mit Datum arbeite! Gibts ne einfache Möglichkeit um zu überprüfung ob das Datum real ist? So Quasi: 11.10.2010 => true 32.10.2010 => false gleiches gilt auch für den Februar in Schaltjahren! Wär super wenn mir jemand sagen kann ob das einfach geht, so schwer kann das doch eigentlich nicht sein, aber ich habe gerade das klassische brett vorm kopf!:upps Danke schonmal! Zitieren
lbm1305 Geschrieben 14. September 2010 Geschrieben 14. September 2010 Moin, vielleicht helfen Dir die Methoden TryParse und IsLeapYear von DateTime weiter. Zitieren
2K1.INC Geschrieben 15. September 2010 Geschrieben 15. September 2010 Hi, benutz doch einfach die DateTimeKlasse. DateTime Tag = new DateTime(2010, 10, 32); Sollte es kein gültiges Datum sein wie in dem beispiel hier wirft er automatisch eine ArgumentOutOfRangeException, schreib dir einfach eine Methode zum prüfen. So könnte die Methode aussehn: private bool isDateLegal(int Year, int Month, int Day) { try { DateTime datum = new DateTime(Year, Month, Day); return true; } catch (ArgumentOutOfRangeException ex) { return false; }catch (Exception e){} } hier der Aufruf der Methode als Beispiel if (isDateLegal(2010, 10, 32)) { // Gültiges Datum das hier weiter verarbeitet werden soll } else { // Unglütiges Datum User informiern } Das wär die einfachste Lösung. Edit: Nie vergessen Exception selber abzufangen im catch Zitieren
Rotti Geschrieben 15. September 2010 Autor Geschrieben 15. September 2010 Erstmal besten Dank, ich denke das hilft mir weiter! Ich werd probieren und melde mich dann zurück Zitieren
Rotti Geschrieben 15. September 2010 Autor Geschrieben 15. September 2010 sorry für DP: @2K1.INC Ja klar mit DateTime arbeite ich ohnehin, ich habs jetzt auch so bzw. so ähnlich gemacht und nun läufts Vielen Dank für die Hilfe! Damit kann der Thread auch geclosed werden Zitieren
lbm1305 Geschrieben 15. September 2010 Geschrieben 15. September 2010 @2K1.INC Ja klar mit DateTime arbeite ich ohnehin, ich habs jetzt auch so bzw. so ähnlich gemacht und nun läufts Wie sieht Deine Lösung aus? Wie oben beschrieben? Persönlich finde ich die Variante von 2K1.INC nicht sooo doll. Warum? Weil erst noch die Exception behandelt werden muss, was wiederum Resourcen kostet. Man sollte möglichst auf Exceptions verzichten bzw. nur da einsetzen, wenn es nicht anders geht. Was spricht den gegen? PseudoCode: DateTime dateValue; bool result = DateTime.TryParse("32.10.2010", out dateValue); Der wert von dateValue ist entweder das richtige Datum oder wenn TryParse fehlschlägt das MinDate (01.01.0001 --> oder so). Zitieren
Rotti Geschrieben 15. September 2010 Autor Geschrieben 15. September 2010 Ich habs jetzt ganz anders gelöst! Ich hab mir ne Liste angelegt: List<short> Monatstage= new List<short>(); und die dann mit werten gefüllt: Monatstage.Add(31); Monatstage.Add(28); Monatstage.Add(31); Monatstage.Add(30); usw. anschließend hab ich noch eine abfrage drin: if (DateTime.IsLeapYear(Jahr)) Monatstage[1] = 29; else Monatstage[1] = 28; Und dann Rechne ich die Werte für Sekunden, Minuten, Stunden, Tage, Monate & Jahre hoch! War aufgrund der Datei die ich auslese leider für nicht leichter machbar Zitieren
2K1.INC Geschrieben 15. September 2010 Geschrieben 15. September 2010 Wie sieht Deine Lösung aus? Wie oben beschrieben? Persönlich finde ich die Variante von 2K1.INC nicht sooo doll. Warum? Weil erst noch die Exception behandelt werden muss, was wiederum Resourcen kostet. Man sollte möglichst auf Exceptions verzichten bzw. nur da einsetzen, wenn es nicht anders geht. Was spricht den gegen? PseudoCode: DateTime dateValue; bool result = DateTime.TryParse("32.10.2010", out dateValue); Der wert von dateValue ist entweder das richtige Datum oder wenn TryParse fehlschlägt das MinDate (01.01.0001 --> oder so). TryParse löst auch Exceptions aus... man bekommt zwar keine weil die Methode/Klasse die Exceptions selber behandelt... Zitieren
NerdonRails Geschrieben 16. September 2010 Geschrieben 16. September 2010 Ich verstehe das Problem nicht. DateTime wirft bei invaliden Daten doch ArgumentOutOfRangeExceptions. [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void TestThatLeapYearsAreAutomaticallyChecked() { DateTime dt = new DateTime(2010, 2, 29); } [TestMethod] [ExpectedException(typeof(ArgumentOutOfRangeException))] public void TestThatInvalidDatesThrowAnException() { DateTime dt = new DateTime(2010, 12, 32); } Da sollte ein einfaches Try-Catch beim erstellen eines neuen DateTime.Objektes doch eigentlich reichen, oder irre ich da ? Zitieren
2K1.INC Geschrieben 16. September 2010 Geschrieben 16. September 2010 ne föllig richtig das steht schon da dritter Beitrag, es ging noch darum das einem meine Lösung nicht gefallen hat weil ich Exceptions abfange weil das Speicher frisst darum meinte er man solle TryParse usen was aber intern selber Exception wirt man aber keine bekommt weil die Klasse das selber behandelt... Zitieren
NerdonRails Geschrieben 16. September 2010 Geschrieben 16. September 2010 ne föllig richtig das steht schon da dritter Beitrag, es ging noch darum das einem meine Lösung nicht gefallen hat weil ich Exceptions abfange weil das Speicher frisst darum meinte er man solle TryParse usen was aber intern selber Exception wirt man aber keine bekommt weil die Klasse das selber behandelt... Ups, überlesen, verdammter Schlafmangel. Die Exceptions-Lösung ist aber im gegensatz zu irgendwelchen selbstverwalteten Listen und komischen selbstgefrickelten Validierungen die eleganteste und sicherste Lösung und ist sicher in Sachen Speicher (wovon man im Zeitalter von 1 GB+ RAM mehr als genug haben sollte) die effizienteste Lösung. Zusätzlich dupliziert man einfach keinen Code der so schon in der Sprache vorhanden ist. Zitieren
lbm1305 Geschrieben 16. September 2010 Geschrieben 16. September 2010 weil das Speicher frisst Wo steht das? Zitieren
2K1.INC Geschrieben 16. September 2010 Geschrieben 16. September 2010 Wie sieht Deine Lösung aus? Warum? Weil erst noch die Exception behandelt werden muss, was wiederum Resourcen kostet. hier... darum gehts nun aber auch nicht mehr, er hat sein problem gelöst somit ist alles andere hier sinnlos Zitieren
Rotti Geschrieben 16. September 2010 Autor Geschrieben 16. September 2010 SIE hat ihr Problem gelöst! Jungs es gibt auch weibliche Programmierer Trotzdem noch mal besten Dank!:uli Zitieren
2K1.INC Geschrieben 16. September 2010 Geschrieben 16. September 2010 SIE hat ihr Problem gelöst! Jungs es gibt auch weibliche Programmierer Trotzdem noch mal besten Dank!:uli Rotti klingt so hmm männlich ;D Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.