Zum Inhalt springen

[C#] Datum auf Gültigkeit prüfen


Rotti

Empfohlene Beiträge

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!

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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).

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 ?

Link zu diesem Kommentar
Auf anderen Seiten teilen

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...

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...