Benutzer mit den meisten Antworten
Bug: Falsche CTimeSpan Anzeige (CString? Problem)

Frage
-
Hello
CTimeSpan ts Anzeige in CString
Folgender Code hat in VC6 noch richtig funktioniert.
In VS10 zeigt sie den Wert immer falsch an. Sekunden werden immer als Null angezeigt.
Why?Gruss, Tom
time_t tEtchTime(215); // 215[sec] = 3Min 35 Sec CString str1; CString str2 CTimeSpan ts(lfEtchTime);
LONG min = ts.GetMinutes();
LONG sec = ts.GetSeconds();str1.Format(_T("%d:%2.2d"),min,sec); // ok, str1 = 3:35 str2.Format(_T("%d:%2.2d"), ts.GetTotalMinutes(), ts.GetSeconds()); // wrong str2 = 3:00
- Bearbeitet vcdummie Dienstag, 24. Juli 2012 10:15
Antworten
-
Nun die Größen Erweiterungen gibt es ja schon lange (gab es schon in DSO Zeiten), wie z.b. für long eben das "%ld". Für 64 Bit Datentypen wurde das ganze noch erweitert. Übrigens geht auch "%I64d". Wäre sogar treffender, da LONGLONG wohl auf _int64 beruht. Da aber sowohl "long long" als auch "_int64" ein 64 Bit Datentyp sind die Größen Bezeichner beide passend. Aber der hier von mir genannte ist passender.
Die Größen Angaben sind aber aus meiner Sicht nicht optional, da Format(...) ja wissen muß wie viele Bytes geholt werden müssen.
Die "Size Specification" hast Du ja selber gefunden.
Alle Antworten
-
Dein format string ist falsch. GettotalMinutes gibt einen LONGLONG zurück. Da wäre der formatstring "%lld:%2.2d". Der code wäre dann:
str2.Format(_T("%lld:%2.2d"), ts.GetTotalMinutes(), ts.GetSeconds());
Der Bug ist in Deinem code gewesen, nicht im CSTring oder CTimespan .... :-)
- Bearbeitet Bordon Dienstag, 24. Juli 2012 10:56
-
Yep!
Aber where the hell do you know all about the format-Specifier??
Es ist fast eine Lotterie den richtigen zu finden!http://msdn.microsoft.com/en-us/library/56e442dc
says this ll-Format is optional...
- h| l| ll| I| I32| I64
Optional prefixes to type-that specify the size of argument (see the "Size Prefixes" table in Size Specification).
-
Nun die Größen Erweiterungen gibt es ja schon lange (gab es schon in DSO Zeiten), wie z.b. für long eben das "%ld". Für 64 Bit Datentypen wurde das ganze noch erweitert. Übrigens geht auch "%I64d". Wäre sogar treffender, da LONGLONG wohl auf _int64 beruht. Da aber sowohl "long long" als auch "_int64" ein 64 Bit Datentyp sind die Größen Bezeichner beide passend. Aber der hier von mir genannte ist passender.
Die Größen Angaben sind aber aus meiner Sicht nicht optional, da Format(...) ja wissen muß wie viele Bytes geholt werden müssen.
Die "Size Specification" hast Du ja selber gefunden.