![]() |
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 |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Ehm, kann das mal sein dass das lediglich lokalisierte Platzhalter sind?
Das ist exakt das gleiche wie im FormatSettings beim DatePicker. Die Anzeige muss man selber schreiben, auswerten über die aktuellen System Settings. ![]() |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
1. Das TFormatSettings.ShortDateFormat' ist das Format eine 'andere' Darstellung gibt es nicht!!! 2. Windows unterscheidet (wie erwähnt) zwischen SYSTEM und USER Wenn Du als User angemeldet bist, dann zeigt dir Windows die Settings des Users an. Spricht: Englisches Windows, User hat auf deutsch umgestellt, Windows zeigt die Deutschen Settings an. Rüfst Du hingegen die Fortmatsettings ohne Windows-Anmeldung ab (z.B. bei einem Dienst) erhälst Du die SYSTEM-Formatsettings, welche bei einem Englischen Windows eben EN sind! Irgendwo hatten wir hier im Forum auch einen Thread, wlcher sich mit dem Bug von Win7 beschäftigt und dem Bug in Delphi (kann sein nur in älteren Versionen) dass dort per default LOCALE_SYSTEM_DEFAULT statt LOCALE_USER_DEFAULT verwendet wurde und somit durch den Bug die falschen Settings gezogen wurden.. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
Es handelt sich also tatsächlich um ein reines Übersetzungsproblem, da du die Übersetzungen für die Kürzel brauchst. Wenn diese Kürzel vorliegen, könnte eine Implementierung etwa so aussehen:
Delphi-Quellcode:
function GetDateHint(const D, M, Y: Char): string;
begin Result := FormatDateTime('c', EncodeDate(3333,11,22)).Replace('3', Y).Replace('1', M).Replace('2', D); end; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Oder meintest Du es so?
Delphi-Quellcode:
Das zeigt Dir eventuell bei Englisch Windows mit Deutscher Einstellung zwei verschiedene Setups an?
var
FmtSet: TFormatSettings; tmp: String; i: Integer; begin GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FmtSet); ShowMessage(FmtSet.ShortDateFormat); GetLocaleFormatSettings(LOCALE_SYSTEM_DEFAULT, FmtSet); ShowMessage(FmtSet.ShortDateFormat); tmp := FmtSet.ShortDateFormat; for i := 1 to Length(tmp) do begin if tmp[i] = 'd' then tmp[i] := 'T'; if tmp[i] = 'y' then tmp[i] := 'J'; end; ShowMessage(tmp); end. Ps: Ergebnis bei mir ist: 2 x dd.MM.yyyy und zu letzt Dein TT.MM.JJJJ |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Schluss mit rumraten, Zeit für die Windows API:
Delphi-Quellcode:
var
lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: TArray<WideChar>; begin lpLocaleName := PChar(LOCALE_NAME_SYSTEM_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; ShowMessage(string(DataValue)); end; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
Zitat:
Eine API von MS habe ich nicht gefunden, somit muss dass wohl manuell gemacht werden. Bei mir steht übrigens 'dd.MM.yyyy' im ShortDateFormat, was dem deutschen Format mit '.' als DateSeparator entspricht. (Ich bin davon ausgegangen, das es um das Problem geht, dass in einem deutschen Windows ein englisches 'dd/mm/yyyy' statt des deutschen 'dd.MM.yyyy' als Format kommt. Dass es dem TE um 'T' statt 'd' geht, ist mir (leider) nicht aufgefallen ;) ) Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
Delphi-Quellcode:
So rufe ich die non-Ex Funktion auf. Da mein Delphi noch keinen Windows.pas Eintrag für die Ex hat, habe ich den lt. MSDN Nachgebastelt.
function GLI(T: Cardinal): String;
var NeedLen : Integer; begin NeedLen := GetLocaleInfo(LOCALE_USER_DEFAULT, t, nil, 0); SetLength(Result, NeedLen); if GetLocaleInfo( LOCALE_USER_DEFAULT, t, PChar(Result), NeedLen) <> 0 then SetLength(Result, NeedLen-1) else RaiseLastOSError; end;
Delphi-Quellcode:
Aber ich bekomme das einfach nicht zum Laufen. Mein Delphi kennt noch kein TArray<WideChar>
function GetLocaleInfoEx(const lpLocaleName: LPCWSTR; const LCType: LCTYPE; out lpLCData: LPWSTR; const cchData: integer): Integer; external kernel32 name 'GetLocaleInfoEx';
Ps: Ein Beispiel Aufruf für den Code da oben schaut so aus
Delphi-Quellcode:
ShowMessage(GLI(LOCALE_SSHORTDATE));
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
und auch da kommt nur 'dd.MM.yyyy' ;) (Zumindestens bei mir) Wie auch aus dem Post ![]() ersichtlich, da dort das 'dd.MM.yyyy' mit StringReplace bearbeitet wird.. Hinzu kommt noch, dass ein einfaches Übersetzen von 'd' nach 'T' auch falsch währe.. Denn die Formatsettings von Microsoft unterscheiden eingentlich zwischen 'd' und 'D'. ![]() |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
@KodeZwerg:
TArray<WideChar> -> array of WideChar! Kennt auch deine Version. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Danke TiGü, ich habe es jetzt so umgesetzt
Delphi-Quellcode:
Ein Kompilat kann ich erzeugen aber der sagt dann immer "Unzulässige Attribute". Was mache ich noch falsch?
function GetLocaleInfoEx(const lpLocaleName: LPCWSTR; const LCType: LCTYPE; out lpLCData: LPWSTR; const cchData: integer): Integer; external kernel32 name 'GetLocaleInfoEx';
procedure DoJob; const LOCALE_NAME_SYSTEM_DEFAULT = '!x-sys-default-locale'; var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; begin lpLocaleName := PChar(LOCALE_NAME_SYSTEM_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; ShowMessage(string(DataValue)); end; procedure TForm1.FormCreate(Sender: TObject); Begin DoJob(); End; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE;
lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Danke fürs korrigieren aber ich erhalte dabei einen leeren String. Anhang 49223
Mein Delphi und ich machen da noch irgendwas falsch. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE;
lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; ... var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; DataString: string; begin lpLocaleName := PChar(LOCALE_NAME_USER_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; SetString(DataString, PChar(@DataValue[0]), Length(DataValue)); ShowMessage(DataString); end; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
So klappt es, vielen Dank!
Hier nochmal für HolgerX wegen fehlender Konstanten zum nachvollziehen:
Delphi-Quellcode:
Aber das Ergebnis bleibt auch hier = dd.MM.yyyy
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE; lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx';
procedure DoJob; const LOCALE_NAME_SYSTEM_DEFAULT = '!x-sys-default-locale'; // <- das bringt bei mir einen Leerstring LOCALE_NAME_USER_DEFAULT = $00; // <- das funktioniert var lpLocaleName: PWideChar; LLCType: LCTYPE; lpLCData: PWideChar; cchData, ReturnValue: Integer; DataValue: array of WideChar; DataString: string; begin lpLocaleName := PChar(LOCALE_NAME_USER_DEFAULT); LLCType := LOCALE_SSHORTDATE; lpLCData := nil; cchData := 0; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); if cchData = 0 then RaiseLastOSError else begin SetLength(DataValue, cchData); lpLCData := @DataValue[0]; cchData := GetLocaleInfoEx(lpLocaleName, LLCType, lpLCData, cchData); end; SetString(DataString, PChar(@DataValue[0]), Length(DataValue)); ShowMessage(DataString); end; also irgendwie alles das gleiche nur eine andere Möglichkeit:gruebel: |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Hmm..
Zitat:
Es scheint keine API zu geben, um das 'TT.MM.JJJJ' zu erhalten, dies macht anscheinend der Windows-Dialog selber.... |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
![]() Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Um das nochmal zu verdeutlichen:
Region-Settings = Deutsch, Sprache = Deutsch => TT.MM.JJJJ Region-Settings = English (US), Sprache = Deutsch => M/T/JJJJ Region-Settings = Deutsch, Sprache = English => DD.MM.YYYY Region-Settings = English (US), Sprache = English => M/D/YYYY |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GLI(T: Cardinal): String;
var NeedLen : Integer; begin NeedLen := GetLocaleInfo(LOCALE_USER_DEFAULT, t, nil, 0); SetLength(Result, NeedLen); if GetLocaleInfo( LOCALE_USER_DEFAULT, t, PChar(Result), NeedLen) <> 0 then SetLength(Result, NeedLen-1) else RaiseLastOSError; end; function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE; lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx'; function GLIx(T: Cardinal): String; const LOCALE_NAME_USER_DEFAULT = $00; var NeedLen : Integer; begin NeedLen := GetLocaleInfoEx(PChar(LOCALE_NAME_USER_DEFAULT), t, nil, 0); SetLength(Result, NeedLen); if GetLocaleInfoEx(PChar(LOCALE_NAME_USER_DEFAULT), t, PChar(Result), NeedLen) <> 0 then SetLength(Result, NeedLen-1) else RaiseLastOSError; end; function GetFmtSet: String; var FmtSet: TFormatSettings; begin try GetLocaleFormatSettings(LOCALE_USER_DEFAULT, FmtSet); finally Result := FmtSet.ShortDateFormat; end; end;
Delphi-Quellcode:
Alle Varianten liefern "dd.MM.yyyy" als Ergebnis, ist es Geschmacksfrage oder gibt es da noch ein Richtig/Falsch ?
ShowMessage('GLIx: ' + GLIx(LOCALE_SSHORTDATE));
ShowMessage('GLI: ' + GLI(LOCALE_SSHORTDATE)); ShowMessage('TFormatSettings:' + GetFmtSet); |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
![]() gruss |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Delphi-Quellcode:
function GetLocaleString(LangID: Integer): string;
var s: string; begin Result := ''; SetLength(s, 128); if GetLocaleInfo(LangID, LOCALE_SNATIVELANGNAME, PChar(s), 128) > 0 then begin Result := StrPas(PChar(s)); if GetLocaleInfo(LangID, LOCALE_SNATIVECTRYNAME, PChar(s), 128) > 0 then begin Result := Format('%s (%s)', [Result, StrPas(PChar(s))]); end; end; end;
Delphi-Quellcode:
So bekomme ich in etwa das hin was Uwe schreibt aber es beantwortet nicht meine Frage, Danke trotzdem.
ShowMessage(GetLocaleString(GetUserDefaultLangID));
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Vielleicht noch etwas - wie das Datumsformat aussehen soll steht in der ISO 8601.
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
Delphi-Quellcode:
function LCIDToLocaleName(Locale: LCID; lpName: LPWSTR; cchName: Integer; dwFlags: DWORD): Integer; stdcall; external kernel32 name 'LCIDToLocaleName';
function LCIDToLocal ( LCID: Integer ) : String; var strNameBuffer : array [0..LOCALE_NAME_MAX_LENGTH-1] of WideChar; begin Result := ''; if (LCIDToLocaleName(LCID, strNameBuffer, LOCALE_NAME_MAX_LENGTH, 0) = 0) then RaiseLastOSError else Result := strNameBuffer; end; procedure DoJob; begin Memo1.Lines.Add('GetLocaleString: '+GetLocaleString(GetUserDefaultLangID)); Memo1.Lines.Add('LCIDToLocal: ' + LCIDToLocal(GetUserDefaultLangID)); Memo1.Lines.Add('LOCALE_ILANGUAGE: ' + GLIx(LOCALE_ILANGUAGE)); Memo1.Lines.Add('LOCALE_SLANGUAGE: ' + GLIx(LOCALE_SLANGUAGE)); Memo1.Lines.Add('LOCALE_SENGLANGUAGE: ' + GLIx(LOCALE_SENGLANGUAGE)); Memo1.Lines.Add('LOCALE_SABBREVLANGNAME: ' + GLIx(LOCALE_SABBREVLANGNAME)); Memo1.Lines.Add('LOCALE_SNATIVECTRYNAME: ' + GLIx(LOCALE_SNATIVECTRYNAME)); Memo1.Lines.Add('LOCALE_ICOUNTRY: ' + GLIx(LOCALE_ICOUNTRY)); Memo1.Lines.Add('LOCALE_SCOUNTRY: ' + GLIx(LOCALE_SCOUNTRY)); Memo1.Lines.Add('LOCALE_SENGCOUNTRY: ' + GLIx(LOCALE_SENGCOUNTRY)); Memo1.Lines.Add('LOCALE_SABBREVCTRYNAME: ' + GLIx(LOCALE_SABBREVCTRYNAME)); Memo1.Lines.Add('LOCALE_SNATIVECTRYNAME: ' + GLIx(LOCALE_SNATIVECTRYNAME)); Memo1.Lines.Add('LOCALE_IDEFAULTLANGUAGE: ' + GLIx(LOCALE_IDEFAULTLANGUAGE)); Memo1.Lines.Add('LOCALE_IDEFAULTCOUNTRY: ' + GLIx(LOCALE_IDEFAULTCOUNTRY)); Memo1.Lines.Add('LOCALE_IDEFAULTCODEPAGE: ' + GLIx(LOCALE_IDEFAULTCODEPAGE)); Memo1.Lines.Add('LOCALE_IDEFAULTANSICODEPAGE: ' + GLIx(LOCALE_IDEFAULTANSICODEPAGE)); Memo1.Lines.Add('LOCALE_IDEFAULTMACCODEPAGE: ' + GLIx(LOCALE_IDEFAULTMACCODEPAGE)); Memo1.Lines.Add('LOCALE_SLIST: ' + GLIx(LOCALE_SLIST)); Memo1.Lines.Add('LOCALE_IMEASURE: ' + GLIx(LOCALE_IMEASURE)); Memo1.Lines.Add('LOCALE_SDECIMAL: ' + GLIx(LOCALE_SDECIMAL)); Memo1.Lines.Add('LOCALE_STHOUSAND: ' + GLIx(LOCALE_STHOUSAND)); Memo1.Lines.Add('LOCALE_SGROUPING: ' + GLIx(LOCALE_SGROUPING)); Memo1.Lines.Add('LOCALE_IDIGITS: ' + GLIx(LOCALE_IDIGITS)); Memo1.Lines.Add('LOCALE_ILZERO: ' + GLIx(LOCALE_ILZERO)); Memo1.Lines.Add('LOCALE_INEGNUMBER: ' + GLIx(LOCALE_INEGNUMBER)); Memo1.Lines.Add('LOCALE_SNATIVEDIGITS: ' + GLIx(LOCALE_SNATIVEDIGITS)); Memo1.Lines.Add('LOCALE_SCURRENCY: ' + GLIx(LOCALE_SCURRENCY)); Memo1.Lines.Add('LOCALE_SINTLSYMBOL: ' + GLIx(LOCALE_SINTLSYMBOL)); Memo1.Lines.Add('LOCALE_SMONDECIMALSEP: ' + GLIx(LOCALE_SMONDECIMALSEP)); Memo1.Lines.Add('LOCALE_SMONTHOUSANDSEP: ' + GLIx(LOCALE_SMONTHOUSANDSEP)); Memo1.Lines.Add('LOCALE_SMONGROUPING: ' + GLIx(LOCALE_SMONGROUPING)); Memo1.Lines.Add('LOCALE_ICURRDIGITS: ' + GLIx(LOCALE_ICURRDIGITS)); Memo1.Lines.Add('LOCALE_IINTLCURRDIGITS: ' + GLIx(LOCALE_IINTLCURRDIGITS)); Memo1.Lines.Add('LOCALE_ICURRENCY: ' + GLIx(LOCALE_ICURRENCY)); Memo1.Lines.Add('LOCALE_INEGCURR: ' + GLIx(LOCALE_INEGCURR)); Memo1.Lines.Add('LOCALE_SDATE: ' + GLIx(LOCALE_SDATE)); Memo1.Lines.Add('LOCALE_STIME: ' + GLIx(LOCALE_STIME)); Memo1.Lines.Add('LOCALE_SSHORTDATE: ' + GLIx(LOCALE_SSHORTDATE)); Memo1.Lines.Add('LOCALE_SLONGDATE: ' + GLIx(LOCALE_SLONGDATE)); Memo1.Lines.Add('LOCALE_STIMEFORMAT: ' + GLIx(LOCALE_STIMEFORMAT)); Memo1.Lines.Add('LOCALE_IDATE: ' + GLIx(LOCALE_IDATE)); Memo1.Lines.Add('LOCALE_ILDATE: ' + GLIx(LOCALE_ILDATE)); Memo1.Lines.Add('LOCALE_ITIME: ' + GLIx(LOCALE_ITIME)); Memo1.Lines.Add('LOCALE_ITIMEMARKPOSN: ' + GLIx(LOCALE_ITIMEMARKPOSN)); Memo1.Lines.Add('LOCALE_ICENTURY: ' + GLIx(LOCALE_ICENTURY)); Memo1.Lines.Add('LOCALE_ITLZERO: ' + GLIx(LOCALE_ITLZERO)); Memo1.Lines.Add('LOCALE_IDAYLZERO: ' + GLIx(LOCALE_IDAYLZERO)); Memo1.Lines.Add('LOCALE_IMONLZERO: ' + GLIx(LOCALE_IMONLZERO)); Memo1.Lines.Add('LOCALE_S1159: ' + GLIx(LOCALE_S1159)); Memo1.Lines.Add('LOCALE_S2359: ' + GLIx(LOCALE_S2359)); Memo1.Lines.Add('LOCALE_ICALENDARTYPE: ' + GLIx(LOCALE_ICALENDARTYPE)); Memo1.Lines.Add('LOCALE_IOPTIONALCALENDAR: ' + GLIx(LOCALE_IOPTIONALCALENDAR)); Memo1.Lines.Add('LOCALE_IFIRSTDAYOFWEEK: ' + GLIx(LOCALE_IFIRSTDAYOFWEEK)); Memo1.Lines.Add('LOCALE_IFIRSTWEEKOFYEAR: ' + GLIx(LOCALE_IFIRSTWEEKOFYEAR)); Memo1.Lines.Add('LOCALE_SDAYNAME1: ' + GLIx(LOCALE_SDAYNAME1)); Memo1.Lines.Add('LOCALE_SDAYNAME2: ' + GLIx(LOCALE_SDAYNAME2)); Memo1.Lines.Add('LOCALE_SDAYNAME3: ' + GLIx(LOCALE_SDAYNAME3)); Memo1.Lines.Add('LOCALE_SDAYNAME4: ' + GLIx(LOCALE_SDAYNAME4)); Memo1.Lines.Add('LOCALE_SDAYNAME5: ' + GLIx(LOCALE_SDAYNAME5)); Memo1.Lines.Add('LOCALE_SDAYNAME6: ' + GLIx(LOCALE_SDAYNAME6)); Memo1.Lines.Add('LOCALE_SDAYNAME7: ' + GLIx(LOCALE_SDAYNAME7)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME1: ' + GLIx(LOCALE_SABBREVDAYNAME1)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME2: ' + GLIx(LOCALE_SABBREVDAYNAME2)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME3: ' + GLIx(LOCALE_SABBREVDAYNAME3)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME4: ' + GLIx(LOCALE_SABBREVDAYNAME4)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME5: ' + GLIx(LOCALE_SABBREVDAYNAME5)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME6: ' + GLIx(LOCALE_SABBREVDAYNAME6)); Memo1.Lines.Add('LOCALE_SABBREVDAYNAME7: ' + GLIx(LOCALE_SABBREVDAYNAME7)); Memo1.Lines.Add('LOCALE_SMONTHNAME1: ' + GLIx(LOCALE_SMONTHNAME1)); Memo1.Lines.Add('LOCALE_SMONTHNAME2: ' + GLIx(LOCALE_SMONTHNAME2)); Memo1.Lines.Add('LOCALE_SMONTHNAME3: ' + GLIx(LOCALE_SMONTHNAME3)); Memo1.Lines.Add('LOCALE_SMONTHNAME4: ' + GLIx(LOCALE_SMONTHNAME4)); Memo1.Lines.Add('LOCALE_SMONTHNAME5: ' + GLIx(LOCALE_SMONTHNAME5)); Memo1.Lines.Add('LOCALE_SMONTHNAME6: ' + GLIx(LOCALE_SMONTHNAME6)); Memo1.Lines.Add('LOCALE_SMONTHNAME7: ' + GLIx(LOCALE_SMONTHNAME7)); Memo1.Lines.Add('LOCALE_SMONTHNAME8: ' + GLIx(LOCALE_SMONTHNAME8)); Memo1.Lines.Add('LOCALE_SMONTHNAME9: ' + GLIx(LOCALE_SMONTHNAME9)); Memo1.Lines.Add('LOCALE_SMONTHNAME10: ' + GLIx(LOCALE_SMONTHNAME10)); Memo1.Lines.Add('LOCALE_SMONTHNAME11: ' + GLIx(LOCALE_SMONTHNAME11)); Memo1.Lines.Add('LOCALE_SMONTHNAME12: ' + GLIx(LOCALE_SMONTHNAME12)); Memo1.Lines.Add('LOCALE_SMONTHNAME13: ' + GLIx(LOCALE_SMONTHNAME13)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME1: ' + GLIx(LOCALE_SABBREVMONTHNAME1)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME2: ' + GLIx(LOCALE_SABBREVMONTHNAME2)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME3: ' + GLIx(LOCALE_SABBREVMONTHNAME3)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME4: ' + GLIx(LOCALE_SABBREVMONTHNAME4)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME5: ' + GLIx(LOCALE_SABBREVMONTHNAME5)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME6: ' + GLIx(LOCALE_SABBREVMONTHNAME6)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME7: ' + GLIx(LOCALE_SABBREVMONTHNAME7)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME8: ' + GLIx(LOCALE_SABBREVMONTHNAME8)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME9: ' + GLIx(LOCALE_SABBREVMONTHNAME9)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME10: ' + GLIx(LOCALE_SABBREVMONTHNAME10)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME11: ' + GLIx(LOCALE_SABBREVMONTHNAME11)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME12: ' + GLIx(LOCALE_SABBREVMONTHNAME12)); Memo1.Lines.Add('LOCALE_SABBREVMONTHNAME13: ' + GLIx(LOCALE_SABBREVMONTHNAME13)); Memo1.Lines.Add('LOCALE_SPOSITIVESIGN: ' + GLIx(LOCALE_SPOSITIVESIGN)); Memo1.Lines.Add('LOCALE_SNEGATIVESIGN: ' + GLIx(LOCALE_SNEGATIVESIGN)); Memo1.Lines.Add('LOCALE_IPOSSIGNPOSN: ' + GLIx(LOCALE_IPOSSIGNPOSN)); Memo1.Lines.Add('LOCALE_INEGSIGNPOSN: ' + GLIx(LOCALE_INEGSIGNPOSN)); Memo1.Lines.Add('LOCALE_IPOSSYMPRECEDES: ' + GLIx(LOCALE_IPOSSYMPRECEDES)); Memo1.Lines.Add('LOCALE_IPOSSEPBYSPACE: ' + GLIx(LOCALE_IPOSSEPBYSPACE)); Memo1.Lines.Add('LOCALE_INEGSYMPRECEDES: ' + GLIx(LOCALE_INEGSYMPRECEDES)); Memo1.Lines.Add('LOCALE_INEGSEPBYSPACE: ' + GLIx(LOCALE_INEGSEPBYSPACE)); Memo1.Lines.Add('LOCALE_FONTSIGNATURE: ' + GLIx(LOCALE_FONTSIGNATURE)); Memo1.Lines.Add('LOCALE_SISO639LANGNAME: ' + GLIx(LOCALE_SISO639LANGNAME)); Memo1.Lines.Add('LOCALE_SISO3166CTRYNAME: ' + GLIx(LOCALE_SISO3166CTRYNAME)); end; |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
Danke jedenfalls für die Hilfe, hab das Thema mal nach hinten geschoben da es da wohl außer einer manuellen Übersetzung keine Lösung für gibt. |
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
|
AW: Datumsformat (TT.MM.JJJJ) anzeigen
Zitat:
Das was im String als Trennzeichen steht ist nicht unbedingt das Angezeigte, denn
Delphi-Quellcode:
bedeutet hierbei nunmal, dass dort der jeweilige DateSeparator eingefügt werden soll.
/
Delphi-Quellcode:
ShowMessage(ReplaceStr(FmtSet.LongDateFormat, '/', FmtSet.DateSeparator)); // dd.MM.yyyy
Natürlich könnte man in diesem DateFormat-String auch direkt das Datumszeichen setzen, aber das macht Spaß, wenn man ein englisches Format schreibt und dann den DateSeparator falsch setzt, der das wieder überschreibt. Aber das Lokalisierte TT.MM.JJJJ bekommst du da niemals raus, außer du übersetzt das auch noch. (Y>J, D>T usw.), und viel Spaß mit M für Month oder Minute, je nach dem ob davor ein Datums- oder Zeitformatzeichen steht. (bei zusammengesetzten Datum&Zeitstrings) Dieser Formatstring ist grundsätzlich immer englisch und gibt nur die Reihenfolge/Position/Größe der Felder an. PS: Es gibt auch noch den Bug in einigen vorinstallierten Windowsen. Im Windows gibt es mehrere Stellen, wo das Format gespeichert ist und da vergisst gern jemand alle Stellen anzupassen. Windows zeigt das Eine in den Einstellungsdialogen an, aber Delphi liest dann das Andere aus. (da z.B. mal kurz nach Englisch umstellen, speichern und wieder zurück auf Deutsch) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:51 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