Datum prüfen
-
Hallo wie kann ich ein Datum auf gültigkeit prüfen???

z.B. "31.02.2005" == false
Bitte um Beispiel.
VCL oder reines C++ (WINAPI), danke im voraus
-
Hallo
schau mal im Forum oder in der BCB-Hilfe nach TDateTime und StrToDateTime().
Da sind auch Beispiele.bis bald
akari
-
Hallo Iceman,
die einfachste Möglichkeit, ist so ähnlich wie die hier vor kurzem besprochene StrToFloat-Funktion

bool isValidDate(String datum) { try { TDate nix = StrToDate(datum); return true; } catch (...) { return false; } }Robert
-
DANKE

rowisoft schrieb:
Hallo Iceman,
die einfachste Möglichkeit, ist so ähnlich wie die hier vor kurzem besprochene StrToFloat-Funktion

bool isValidDate(String datum) { try { TDate nix = StrToDate(datum); return true; } catch (...) { return false; } }Robert
-
Hallo,
Übrigens, jede Exception verbraucht Speicher...
Besser man nimmt das hier : "TryStrToDate" zu finden in "SysUtils".Bis dann denn,

Nash
-
leben wir nicht in einem Speicherfrohen Jahundert???????

Mich würde aber nun der Weg mit C++ ohne VCL interessieren!!!
Weist du wie????
Ausserdem geht das mit VCL bei mir auch nicht, wenn ich als Beispiel "20050104"
übergebe kommt immer ne Exception obwohlShortDateFormat = "yyyymmdd";ist.
Hier meine Func.
bool DateValid(String sDate){ // sDate dependent from global Var ShortDateFormat try { TDateTime ValidDate = StrToDate(sDate); return sDate == ValidDate.DateString(); // um warnung zu vermeiden!!! } catch (...) { return false; } }Nash schrieb:
Hallo,
Übrigens, jede Exception verbraucht Speicher...
Besser man nimmt das hier : "TryStrToDate" zu finden in "SysUtils".Bis dann denn,

Nash
-
Hallo,
Du mußt noch den "DateSeparator" setzen. Ich glaube aber nicht, daß Dein Beispiel geht, weil bei Dir der "DateSeparator" keinen Wert hat (haben würde).
Beispiel :
DateSeparator = '-'; ShortDateFormat = "yyyymmdd"; AnsiString TestDateStr = "2005-01-05"; TDate TestDate = StrToDate(TestDateStr);So geht's...

Ich würde aber den "DateSeparator" nicht verändern (ist 'ne Windows-Einstellung).
Wenn man ohne Exceptions arbeiten will, kann man natürlich den hyperumständlichen Weg gehen :
Du kannst ja vor dem Umwandeln checken, ob der "DateSeparator" im String vorhanden ist (mind. 2 mal vorhanden). Wenn ja, dann checken ob die Zeichen, die zwischen den "DateSeparator" sind auch Zahlen sind und ob diese innerhalb des gültigen Bereichs (für Tag, Monat, Jahr) sind. Dann sollte sich das Ganze auch gültig umwandeln lassen.Bis dann denn,

Nash
-
Weis nun noch irgenwer wie es mit C++ ohne VCL geht???
-
Hallo
Wenn du auf reines C++ bestehst : selber eine Funktion schreiben, die alle Zeichen des Chars durchgeht und auf Gültigkeit überprüft. Je nach Flexibilität ein harter Brocken.
Ansonsten hat die boost-Libary eine Zeit-Behandlung, glaube ich.bis bald
akari
-
Die Zeichen durchgehen ist ja kein Problem, aber wie weiß ich ob das Datum auch existiert???????

akari schrieb:
Hallo
Wenn du auf reines C++ bestehst : selber eine Funktion schreiben, die alle Zeichen des Chars durchgeht und auf Gültigkeit überprüft. Je nach Flexibilität ein harter Brocken.
Ansonsten hat die boost-Libary eine Zeit-Behandlung, glaube ich.bis bald
akari
-
Hallo
Die Zeichen durchgehen ist ja kein Problem, aber wie weiß ich ob das Datum auch existiert???????
Naja, es gibt zwölf Monate, jeder Monat hat eine feste Menge von Tagen, dazu noch die Schaltjahre... schon hast dus.
bis bald
akari
-
sorry Doppelpost
-
Hallo,
IcemanX schrieb:
Weis nun noch irgenwer wie es mit C++ ohne VCL geht???
Ich nehme an, Du verwendest den C++Builder (egal welche Version). Was hast Du gegen die VCL ?

Bis dann denn,

Nash