2 Probleme mit CTimeSpan.Format



  • Hallo zusammen!

    1. Problem:
    Ich will die Stunden und Minuten einer CTimeSpan ausgeben. Dabei sollte einstelligen Stunden eine 0 vorangestellt werden.

    Lt. MSDN-Doku sollte dies mit %H auch geschehen (Code aus MSDN):

    // example for CTimeSpan::Format
    CTimeSpan ts( 3, 1, 5, 12 ); // 3 days, 1 hour, 5 min, and 12 sec
    CString s = ts.Format( "Total days: %D, hours: %H, mins: %M, secs: %S" );
    ATLASSERT( s == "Total days: 3, hours: 01, mins: 05, secs: 12" );
    

    Also folgender Code:

    CTimeSpan span(0, 1, 15, 0);
    str = span.Format("%H:%M");
    // Ergebnis: str = "1:15"
    // Gewünschtes Ergebnis: "01:15"
    

    Gibt es irgendwelche anderen Formatierungs-Zeichen, die in der MSDN nicht erwähnt werden?

    2. Problem
    Ich will eine negative Zeitspanne von -3:30 (bzw. eigentlich -03:30) darstellen, also folgender Code:

    CTimeSpan span(0, -4, 30, 0); // -4h +30min == -3h und 30 min
    str = span.Format("%H:%M");
    // Ergebnis: str = "-3:-30"
    // Gewünschtes Ergebnis: "-03:30"
    

    Muss ich mich hier um die Formatierung selbst kümmern oder gibt es hier auch einen anderen Weg mit der Format-Funktion?

    Ich weiß, dass diese Aufgaben ziemlich einfach zu umgehen sind zB mittels

    CTimeSpan span (0, -4, 30, 0);
    str.Format("%.2d:%.2d", span.GetHours(), span.GetMinutes());
    // bzw.
    str.Format("%.2d:%.2d", span.GetHours(), abs(span.GetMinutes()));
    

    allerdings würde mich interessieren, ob das noch anders gehen würde?

    danke, mfg

    --------------------------
    edit:

    Mir ist gerade aufgefallen, dass eine CTimeSpan(0) als "00:00" und nicht als "0:0" mit der oben genannten Formatierung dargestellt wird...


Anmelden zum Antworten