Die Funktion
Der erste Parameter gibt an, welches Format herangezogen werden soll. Zwei Konstanten (LOCALE_SYSTEM_DEFAULT, LOCALE_USER_DEFAULT) sind definiert:
GetTimeFormat(LOCALE_USER_DEFAULT,
Der zweite Parameter ist eine Kombination von Flags. Im Beispiel habe ich mich für
TIME_FORCE24HOURFORMAT,
entschieden, damit das 24-Stunden-Format in jedem Fall benutzt wird. Wenn Sie z.B. auf die Anzeige der Sekunden verzichten wollen, dann benutzen Sie zusätzlich TIME_NOSECONDS:
TIME_FORCE24HOURFORMAT or TIME_NOSECONDS
Weitere Angaben finden Sie im MSDN und PSDK.
Der dritte Parameter ist ein Zeiger auf die TSystemTime-Variable, die die ausgelesene Zeit enthält
@st,
Wenn Sie diesen Parameter auf nil setzen, wird die lokale Zeit verwendet. In den meisten Fällen dürfte dies ausreichen. Da wir im Beispielprogramm aber auch die UTC-Zeit anzeigen wollen, müssen wir hier die Variable benutzen.
Der vierte Parameter ist eigentlich ein Formatstring, mit dem Sie die Darstellung der Zeit beeinflussen können. Da wir aber den Formatstring des Systems nutzen wollen, kann dieser Parameter leer bleiben
nil,
Die beiden letzten Parameter spezifizieren ein Char-Array und dessen Länge:
buf, sizeof(buf))
Im Fehlerfall liefert die Funktion den Wert Null zurück, und Sie können mit "GetLastError" die Ursache dafür herausfinden:
if(GetTimeFormat(LOCALE_USER_DEFAULT,TIME_FORCE24HOURFORMAT, @st,nil,lpBuf,sizeof(buf)) = 0) then case GetLastError of ERROR_INSUFFICIENT_BUFFER: MessageBox(0,'Nicht ausreichender Puffer',nil,0); ERROR_INVALID_FLAGS: MessageBox(0,'Ungültige Flags',nil,0); ERROR_INVALID_PARAMETER: MessageBox(0,'Ungültige Parameter',nil,0); { ... } end;
Im Erfolgsfall wird der übergebende Puffer (im Beispiel "lpBuf") mit dem formatierten Zeitstring gefüllt, und die Funktion liefert die Anzahl der kopierten Zeichen zurück (einschließlich des Zeichens #0). Dies können Sie z.B. bei dynamischen Array nutzen, bei denen Sie die Größe erst zur Laufzeit festlegen. Aber ein Array wie:
var
buf : array[0..MAX_PATH]of char;
reicht in den meisten Fällen aus. (*)
Wenn Sie die Formatierung dennoch einmal selbst übernehmen wollen, dann definieren Sie einen Formatstring wie beispielsweise:
GetTimeFormat(0, TIME_FORCE24HOURFORMAT, @st, 'hh mm ss' { <-- }, buf, sizeof(buf))
In diesem Beispiel würde die Uhrzeit so angezeigt werden:
16 50 10
| Symbol | Bedeutung |
|---|---|
| h | einstellige Stundenanzeige (12-Stunden-Format) |
| hh | zweistellige Stundenanzeige (12-Stunden-Format) |
| H | einstellige Stundenanzeige (24-Stunden-Format) |
| HH | zweistellige Stundenanzeige (24-Stunden-Format) |
| m | einstellige Minutenanzeige |
| mm | zweistellige Minutenanzeige |
| s | einstellige Sekundenanzeige |
| ss | zweistellige Sekundenanzeige |
| t | einstelliger "Time-Marker"; A oder P |
| tt | zweistelliger "Time-Marker"; AM oder PM |