Datum parsen (solved)



  • ich habe mehrere Dateien, mit dem Format <Name>_yyyy-mm-dd_<index>.txt
    ich habe schon "yyyy-mm-dd" mit AnsiString::substr rausgeholt, jetzt müsste ich das Datum irgendwie in ein TDate umwandeln um es mit einem anderen vergleichen zu können und dann die Dateien zu löschen die ein älter als 5 tage sind.

    wenn ich einfach ein referenzdatum (FormatString("yyyy-mm-dd");) erzeuge lösch ich leider nur alle dateien die auf den tag genau 5 tage alt sind aber keine die älter sind, deswegen wollt ich hier mal frage ob es eine einfach lösung gibt wie ich yyyy-mm-dd zu einem TDate parsen kann.

    ..... vlleicht ist es wieder nur eine einzige Methode und ich seh den wald vor lauter bäumen nich

    [EDIT] benutze jetzt StrToDate();
    habe folgendes im ctor deklariert:

    DateSeparator = '-';
    ShortDateFormat = "yyyy-mm-dd";

    ob des so geht =? bin mal gespannt bis in 10min

    [EDIT] mh irgendwie will das doch nicht -_-" kommt immer nur dieses dämliche anfangsdatum raus!

    [EDIT(korrektur)] es geht doch, hab nur den fall ignoriert das ich eine datei mit fehlerhaften datumstring einlese, jetzt klappt es einwandfrei ^^



  • DateSeparator = '-';
    ShortDateFormat = "yyyy-mm-dd";
    
    	TDateTime Reference;
    	if (FindFirst(Path+FLogFileName+AnsiString("*.txt"), faAnyFile, SearchRec) == 0) {
    		AnsiString TimeStr = SearchRec.Name.SubString(0,SearchRec.Name.LastDelimiter("_")-1); //Dateiendung und index werden abgeschnitten
    		TimeStr = TimeStr.SubString(TimeStr.LastDelimiter("_")+1, TimeStr.Length()-1); // Dateianfang bis zum Datum abschneiden
    		Reference = StrToDateDef(TimeStr, Date.CurrentDate()); // String hat jetzt das format yyyy-mm-dd und kann geparst werden (wenn fehler dann aktuelles datum)
    		if ( Reference < Date.CurrentDate()-FFileLifeTime) { //vergleichen
    			DeleteFile(SearchRec.Name); //löschen
    		}
    	}
    	while (FindNext(SearchRec) == 0) {  //das ganze bis keine datei mehr gefunden wird
    		AnsiString TimeStr = SearchRec.Name.SubString(0,SearchRec.Name.LastDelimiter("_")-1);
    		TimeStr = TimeStr.SubString(TimeStr.LastDelimiter("_")+1, TimeStr.Length()-1);
    		Reference = StrToDateDef(TimeStr, Date.CurrentDate());
    		if ( Reference < Date.CurrentDate()-FFileLifeTime) {
    			DeleteFile(SearchRec.Name);
    		}
    	}
    	FindClose(SearchRec);  // Suchanfrage beenden
    

    für die die es interessiert oder die danach später mal suchen


Anmelden zum Antworten