zu heutigem Datum 1 Jahr addieren und 1 Tag abziehen



  • Hallo zusammen,

    ich würde gerne das Datum von einem DateTimePicker um plus 1 Jahr minus 1 Tag bekommen.
    Gibt es hier eine Funktion oder muss man das von Hand machen?

    Gruß Ludwig



  • Hi Datum1,

    wüsste da keine, die das so auf Anhieb kann.
    Vor allem musst Du Dir erst mal darüber klar werden, was Du damit genau meinst. Meinst Du den Vorag des gleichen Tages im Monat in Jahr später, oder meinst Du den Vortag des gleichen Tags im Jahr ein Jahr später?
    Beides unterscheidet sich etwas in der Bewertung des Schaltjahres.
    YearOf, DayOffTheMont, DayOfTheYear and MontOfTheYear, MonthOf and DayOf bieten sich da an. Aber ebenso kannst Du auch einfach zum Datum 364 bzw. bei Schaltjahr 365 dazu addieren.
    Ist nur ne Frage, was Dir einfacher und übersichtlicher erscheint. Ich würde die einfachen 364 vorziehen, da Du sonst wenn Du das Datum aus Jahr, Monat und Tag zusammensetzt beim Monatsersten im Vormaonat landest und das mit einrechnen musst.

    Gru Mümmel



  • Habe es jetzt so zusammengebaut und getestet, geht auch bei Jahreswechsel.

    AnsiString datum;
       int subdatum;
       subdatum = StrToInt(YearOf(DateTimePicker1->Date))+1;
       datum =  DateToStr(DateTimePicker1->Date -1).SubString(1,6) + IntToStr(subdatum);
    

    Gruß und Danke



  • Und jetzt denk nochmal drüber nach, warum du StrToInt und dann IntToStr machst.



  • Wenig hilfreicher Kommentar!

    Die Umwandlung mache ich weil ich zu einem String schlecht ein Zahl addieren kann und zurück wandle ich, weil ich einen Integer schlecht zu einem String dazubauen kann.
    Die Lösung funktioniert, auch wenn es sicher eine bessere oder elegantere Lösung gibt. Dann wäe es aber sinnvoll diese zu posten, statt einen Spruch zu drücken.



  • Von Datums-Mainpulationen mittels Strings rate ich dir dringenst ab. Hierzu gibt es zig tolle Funktionen, die auch Randbedingungen, wie z.B. Schaltjahre, Anzahl Tage pro Monat etc., berücksichtigen. Schau mal in die Datei ...include\windows\rtl\dateutils.hpp.

    Hast du dir mal überlegt, was passiert, wenn mit deiner Lösung in einem Schaltjahr am 29.02. das Datum um genau ein Jahr zurücksetzt wird?
    Außerdem liefert DateToStr() das Datum entsprechend den Windows-Systemeinstellungen. Was ist, wenn dort nicht TT.MM.JJJJ sondern z.B. JJJJ-MM-TT eingestellt ist.

    // Ich würde das Problem so lösen:
    #include <DateUtils.hpp>
    
    // 364 Tage vor
    DateTimePicker1->DateTime = IncDay(DateTimePicker1->DateTime,364);
    
    // oder zuerst ein Jahr vor
    DateTimePicker1->DateTime = IncYear(DateTimePicker1->DateTime,1);
    // dann einen Tag zurück
    DateTimePicker1->DateTime = IncDay(DateTimePicker1->DateTime,-1);
    


  • Vielen Dank j.halder,

    das ist die Lösung , die mir fehlte. Die DateUtils habe ich ja sogar dafür in Verwendung, die Funktionen Inc... aber glatt übersehen.
    Jetzt bin ich jedenfalls unabhängig von geänderten Datumsformaten.

    Gruß Ludwig


Anmelden zum Antworten