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 obwohl

    ShortDateFormat = "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


Anmelden zum Antworten