COleDateTime



  • Hi,

    ich benutze COleDateTime bzw. dessen String-Formatierung (bei mir "%H:%M:%S") um Zeitspannen anzuzeigen. Das klappt auch bis 23 Stunden und 59 Sekunden ganz gut. Aber dann springt ja der Tag um und ich bin wieder bei 00:00:00 (+ 1 Tag). Ich bräuchte aber 24:00:00. Hat da jemand eine Idee oder einen gut gemeinten Hinweis für mich?

    Phips



  • Sorry, hab grad keine MSDN zur Hand (und mein Inet ist ziemlich langsam), deshalb weiß ich nicht, obs entsprechende Parameter gibt.
    Du könntest dir doch die nötigen Informationen mit COleDateTime::GetHour, COleDateTime::GetMinute, COleDateTime::GetSecond selbst besorgen, dann prüfen ob COleDateTime::GetHour NULL ist (und gegebenfalls auf 24 stellen), und dann mit sprintf (bzw. CString::Format) deinen String selber zusammenschweißen.

    Grüße Rapha



  • Hi,

    ich verstehe nich ganz, wie du das haben willst. Du sprichst von Zeitspannen, da würde ich dann CTimeSpan verwenden.
    Falls du aber so eine Art Uhr machen willst, die alle Zeiten, die mit 00:xx:xx beginnen als 24:xx:xx anzeigt, dann würde ich einfach, wie Rapha schon erwähnt hat, die Stunde prüfen und ggf. auf 24 setzen.
    Oder aber du willst eine Art Zählwerk, welches im Zeitformat hochzählt, also nach 24:59:59 kommt 25:00:00 usw. dann würde ich ebenfalls mit CTimeSpan arbeiten:

    CTimeSpan tsZaehler(0,24,0,0); // momentaner Wert: 24:00:00
    
    tsZaehler += CTimeSpan(0,0,0,1); // um eine Sekunde hochzählen
    
    CString sAusgabe;
    sAusgabe.Format("Uhrzeit mal anders: %d:%d:%d",(tsZaehler.GetMinutes() || tsZaehler.GetSeconds()) ?tsZaehler.GetTotalHours() - 1 : tsZaehler.GetTotalHours(),tsZaehler.GetMinutes(),tsZaehler.GetSeconds());
    
    // Bei Hours iss so ein Aufwand nötig, da ja alle 24 h die Anzahl der Tage inkrementiert wird.
    

    mfg dani



  • OK, danke!

    Ich habs jetzt doch "von Hand gelöst" und die Tage einfachmit 24 multipliziert und zu den Stunden dazu gezählt. Trotzdem danke! 🙂

    Phips!


Anmelden zum Antworten