![]() |
Datumsformat (TT.MM.JJJJ) anzeigen
Guten Morgen,
ich möchte neben einem Eingabefeld das aktuelle Datumsformat anzeigen lassen, so wie das auch in den Regionaleinstellungen von Windows angezeigt wird. Leider bekomme ich bisher nur an ein internes Format welches auch auf einem deutschen Windows in englischer Schreibweise dargestellt wird.
Delphi-Quellcode:
Die Ausgabe lautet 'dd/MM/yyyy' in den Windows Einstellungen steht jedoch 'TT.MM.JJJJ', jetzt die Frage wie schaffe ich es das mir das Format genau so angezeigt wird. Bzw. es müsste immer so dargestellt werden wie das jeweilige System eingestellt ist, also je nach Spracheinstellung.
var
FmtSet: TFormatSettings; begin {$WARN SYMBOL_PLATFORM OFF} FmtSet := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT); {$WARN SYMBOL_PLATFORM ON} ShowMessage(FmtSet.ShortDateFormat); |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hallo,
ergibt aber das richtige Ergebnis:
Delphi-Quellcode:
Gruß Thomas
var
FmtSet: TFormatSettings; begin {$WARN SYMBOL_PLATFORM OFF} FmtSet := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT); {$WARN SYMBOL_PLATFORM ON} ShowMessage(DateToStr(Now,FmtSet); |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
So sollte es sein... Zitat:
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Knifflige Frage.
Die paar Leute die sich im Internet die gleiche Frage gestellt haben ([1], [2]) hast du sicher auch schon gefunden. Da das Format mit 'yyyy' oder 'dd' dokumentiert und sprachunabhängig ist [3] musst du die halt durch deine eigene lokalisierte Fassung ersetzen. Beispielsweise so in der Art:
Delphi-Quellcode:
uses
System.SysUtils, WinApi.Windows, Vcl.Dialogs; function getShortDateFormat(): String; const lcType = LOCALE_SSHORTDATE; var str: String; bufferSize: Integer; begin bufferSize := GetLocaleInfoEx( PChar(LOCALE_NAME_USER_DEFAULT), lcType, nil, 0 ); str := String.Create(#0, bufferSize); Win32Check( GetLocaleInfoEx( PChar(LOCALE_NAME_USER_DEFAULT), lcType, PChar(str), bufferSize ) = bufferSize ); Result := Str; end; procedure p(); resourcestring shortDay = 'T'; shortMonth = 'M'; shortYear = 'Y'; var shortDateFormat: String; begin shortDateFormat := getShortDateFormat() .Replace('d', shortDay) .Replace('M', shortMonth) .Replace('y', shortYear); ShowMessage(shortDateFormat); end; [1] ![]() [2] ![]() [3] ![]() |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
Zitat:
Da bist Du in eine kleine Windows-Falle gatappt! Ich vermute, dass dein Rechner entweder ein auf deutsch umgestelltes englisches Windows ist, oder dass hier der Windows 7 EN auf 10 Upgrade-Bug zugeschlagen hat! ;) Nehme mal statt LOCALE_SYSTEM_DEFAULT das LOCALE_USER_DEFAULT
Delphi-Quellcode:
Denn mit LOCALE_SYSTEM_DEFAULT werden die OS-Einstellungen gelesen, mit LOCALE_USER_DEFAULT die User-Einstellungen, welche dir auch von Windows angezeigt werden...
var
FmtSet: TFormatSettings; begin {$WARN SYMBOL_PLATFORM OFF} FmtSet := TFormatSettings.Create(LOCALE_USER_DEFAULT); {$WARN SYMBOL_PLATFORM ON} ShowMessage(FmtSet.ShortDateFormat); |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
@TUX_der_Pinguin
Hier eine kleine Funktion aus einem meiner Programme:
Delphi-Quellcode:
Das habe ich so geregelt, weil ich das Datum und Uhrzeit unabhängig einer Landeseinstellung immer im gleichen Format speichern und lesen wollte.
const
FS_Ger_DateSeparator = '.'; FS_Ger_TimeSeparator = ':'; function FS: TFormatSettings; begin GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, Result); Result.DateSeparator := FS_Ger_DateSeparator; Result.TimeSeparator := FS_Ger_TimeSeparator; Result.ShortDateFormat := 'dd/MM/yyyy'; Result.ShortTimeFormat := 'hh:mm'; Result.LongTimeFormat := 'hh:mm:ss'; end; Zuerst zu den Schrägstrichen "/" in TFormatSettings. Die muss man als Platzhalter verstehen. Zufällig passt es zu der us-amerikanischen Schreibweise. Wenn du da etwas anders rein schreibst, zB. Rauten:
Delphi-Quellcode:
deaktivierst du sozusagen die Platzhalterfunktion. In dem Fall wird das Datum mit Rauten angezeigt. Ist es ein Schrägstrich, wird das Zeichen aus
Result.ShortDateFormat := 'dd#MM#yyyy'
Delphi-Quellcode:
genommen. Diese Besonderheit darf man nicht vergessen . Also entweder man läßt die Schrägstriche in Ruhe, dann nimmt das System den DateSeparator, oder du manipulierst den String in ShortDateFormat direkt (was ich nicht empfehlen würde).
Result.DateSeparator
Machen wir ein Beispiel:
Delphi-Quellcode:
Änder nun diese Zeile:
procedure TForm1.Button1Click(Sender: TObject);
var FS2: TFormatSettings; begin FS2 := FS; ShowMessage(FormatDateTime(FS2.ShortDateFormat, Now, FS2)); end;
Delphi-Quellcode:
Soviel zum Thema Punkt und Strich. Der Strich ist nur ein Platzhalter für das eigentliche Zeichen. Wo es die Umrechnung von TT zu dd oder YYYY zu JJJJ gibt weiß ich nicht. Vermutlich gibt es auch einen Record mit den Informationen.
const
FS_Ger_DateSeparator = '~'; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Einige hier scheinen die Problemstellung einfach nicht richtig zu verstehen. Vielleicht solltest du einen konkreten Test-Case machen, der genau zeigt, was du haben willst.
So wie ich das sehe, handelt es sich hier eher um ein Übersetzungsproblem und nicht um die länderspezifische Darstellung eines Datums. en-US: 'mm/dd/yyyy' de-de: 'TT.MM.JJJJ' Gefragt ist also nicht der tatsächliche Format-String, der z.B. für FormatDate verwendet wird, sondern der Hinweistext zur Eingabe eines Datumswerts. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 49217 Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Moin...8-)
Imho haben die FormatSettings einen Bug was die Zeit betrifft. ![]() Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
Anhang 49218 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz