COleDateTime in Tage umrechnen - wie?



  • Hallo!

    Gibt es bei COleDateTime sowas wie GetTotalDays von COleDateTimeSpan?
    Oder muss ich mir ein Datum ausgucken und dazu immer die Differenz in Tagen speichern?

    Es geht darum:
    Es soll ausgewertet werden, wie lange das letzte Backup in Tagen her ist.
    Der Zeitpunkt wird in der Registry gespeichert.



  • wenn du das aus der Registry holst, kannst dann nicht auch CTime und CTimeSpan benutzen?



  • COleDateTime speichert keine Zeitdifferenzen, sondern absolute Datumsangaben, also benötigst du zwei Datumsobjekte, zwischen denen du die Differenz bestimmen kannst:

    COleDateTime talt=getLastUpdate();
    COleDateTime tneu=COleDateTime::GetCurrentTime();
    
    COleDateTimeSpan delta=tneu-talt;
    TRACE("Zeit seit Update: %d Tage\n",delta.GetDays());
    


  • CTime mag ich wegen des engen Wertebereichs nicht - kann das das denn? 😕



  • estartu_de schrieb:

    Gibt es bei COleDateTime sowas wie GetTotalDays von COleDateTimeSpan?
    Oder muss ich mir ein Datum ausgucken und dazu immer die Differenz in Tagen speichern?

    Du musst natürlich immer ein Referenzdatum haben! Woher soll denn sonst das Datum wissen auf was Du Dich beziehen willst?



  • Es gab da doch mal was, wo das automatisch irgendeines genommen hat.
    DOS-Datum? Unix?

    Naja, ich habe es jetzt so:

    m_dHeute = (DWORD)(COleDateTime::GetCurrentTime() - COleDateTime(1900, 1, 1, 0, 0, 0)).GetTotalDays();
    


  • Wieso nimmst du denn ein "künstliches" Referenzdatum? Du kannst doch gleich die Differenz zu deinem BackUp-Datum verwenden (siehe mein Code-Beispiel oben).



  • Ich nehme deshalb ein künstliches Datum, weil ich kein Datum in der Registry speichern kann/will. Das ist mir zu viel Umwandlerei.

    So rechne ich die Differenz aus und das ist Heute.
    Und der Wert in der Registry war mal "Heute" und so kriege ich raus, wieviele Tage das her ist.

    Ich will einfach wissen, wie lange das letzte Backup her ist und wenn der Wert zu hoch ist, dem User auf die Nerven gehen - und zwar ordentlich. 😉



  • estartu_de schrieb:

    Ich nehme deshalb ein künstliches Datum, weil ich kein Datum in der Registry speichern kann/will. Das ist mir zu viel Umwandlerei.

    Und der Wert in der Registry war mal "Heute" und so kriege ich raus, wieviele Tage das her ist.

    Und wie hast du "damals" das Datum in die Registry gepackt?

    PS: Beim Stöbern habe ich noch etwas gefunden, was dir die Umwandlerei reduzieren kann: WritePrivateProfileStruct und GetPrivateProfileStruct



  • Ich habe neulich erst gelernt, dass die Write...String oder so veraltet sind:
    http://www.c-plusplus.net/forum/viewtopic-var-t-is-123578.html

    Deswegen mache ich das so:

    HKEY hKey;
    	// Zeitpunkt merken
        RegOpenKeyEx(HKEY_LOCAL_MACHINE,
                        "SOFTWARE\\Firma\\Programm",
                        NULL,
                        KEY_SET_VALUE,
                        &hKey); 
    	RegSetValueEx(hKey,"Letztes_BU",0,REG_DWORD,reinterpret_cast<LPBYTE>(&m_dHeute), sizeof(m_dHeute));
    	RegCloseKey(hKey);
    

    Bei der Variante bin ich echt froh, dass ich mittlerweile Strings und DWORDs schreiben kann.
    Ohne Beispiel stehe ich da immer arg im Wald. 😞



  • Oder so 🙂 liest sich die Dokumentation zu ReGSetValueEx durch

    RegSetValueEx(hKey,"Backup_Datum",0,REG_BINARY,&tHeute,sizeof(tHeute));
    

    sollte eigentlich beliebige binäre Daten speichern können.


Anmelden zum Antworten