Format(xx) -> Integer im AnsiString formatieren
-
Hallo zusammen,
möchte aus 3 Zahlen (Stunden, Minuten, Sekunden) das Format hh
ss erhalten.
Dazu verwende ich im BCB6 (Time1 und Time2 sind unterschiedliche TDateTime Vars):Integer i2,i3,i4; AnsiString z1; i2=HoursBetween(Time2, Time1); // Differenz Stunden i3=MinutesBetween(Time2, Time1); // Differenz Minuten i4=SecondsBetween(Time2, Time1); // Differenz Sekunden z1=Format("%2d:%2d:%2d",ARRAYOFCONST((i2,i3,i4))); // Ausgabe hh:mm:ssHeraus kommt aber z.B.: 12: 1: 9 statt 12:01:09
In der Hilfe des BCB steht aber, wenn eine Längenbezeichnung (hier %2d) angegeben ist, dann wird linksbündig mit Nullen aufgefüllt. Ist die Funktion
fehlerhaft oder mache ich einen Denkfehler (sprich was falsch)?MfG Stefan Scholz
-
Ich kenne diese Formatierungen nur von man: printf(3) - und da wird defaultmäßig mit Leerzeichen aufgefüllt. Versuch's doch mal mit dem Formatstring "%02d".
-
...geht leider nicht. Keine führende Null.
Danke aber für den schnellen Tip!
Gruss Stefan
-
Hallo
offenbar gibt es da bei der VCL-Funktion Format einen Fehler, das auffüllen mit der 0 wird nicht unterstützt. Bei sprintf gehts :
#include <stdio.h> Integer i2 = 4,i3 = 6,i4 = 5; char text[20]; sprintf(text, "%02d:%02d:%02d", i2,i3,i4); Label1->Caption =Format("%02d:%02d:%02d",ARRAYOFCONST((i2,i3,i4))) + " " + text;bis bald
akari
-
Hallo, Akari
so geht es in der Tat:
char c1[20]; i2=HoursBetween(Time2, Time1); // Differenz Stunden i3=MinutesBetween(Time2, Time1); // Differenz Minuten i4=SecondsBetween(Time2, Time1); // Differenz Sekunden sprintf(c1, "%02d:%02d:%02d", i2,i3,i4);Vielen Dank, da kann man manchmal wirklich lange suchen

Gruss, Stefan Scholz
-
Es geht schon. Man muß die Hilfe nur gründlich lesen.
If the format string contains a precision specifier, it indicates that the resulting string must contain at least the specified number of digits; if the value has less digits, the resulting string is left-padded with zeros.
Das bedeutet, dass der Precision-Specifier (und width) angegeben werden muß. Also so
z1=Format("%2.2d:%2.2d:%2.2d",ARRAYOFCONST((i2,i3,i4)));
-
Noch was.
Auch AnsiString hat eine Memberfunktion namens sprintf. So kann man akaris Beispiel etwas vereinfachenInteger i2 = 4,i3 = 6,i4 = 5; Label1->Caption =text.sprintf("%02d:%02d:%02d", i2,i3,i4);
-
Werden die HoursBetween etc. noch an anderer Stelle als Einzelwerte benötigt? Das Geraffel kann man sich sonst bzw. überhaupt auch sparen:
z1 = FormatDateTime("hh:mm:ss", Time2 - Time1);