Delphi-PRAXiS
Seite 4 von 4   « Erste     234   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Datumsformat (TT.MM.JJJJ) anzeigen (https://www.delphipraxis.net/196645-datumsformat-tt-mm-jjjj-anzeigen.html)

KodeZwerg 8. Jun 2018 18:44

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:
ShowMessage(GetLocaleString(GetUserDefaultLangID));
So bekomme ich in etwa das hin was Uwe schreibt aber es beantwortet nicht meine Frage, Danke trotzdem.

Alallart 8. Jun 2018 21:12

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1404233)
Sprich bei einem deutschen Windows mit deutschen Regional Einstellungen soll da stehen 'TT.MM.JJJJ' ein 'TFormatSettings.ShortDateFormat' gibt aber 'dd/MM/yyyy' aus. Das Format ist korrekt nur die Darstellung nicht so wie ich das gerne hätte.

So richtig verstehe ich dein Problem nicht wirklich. Ich habe dir bereits vor Tagen geschrieben, dass bei 'dd/MM/yyyy' die Schrägstriche Platzhalter sind. Ich habe dir auch geschrieben, dass es sowas wie einen DateSeparator und TimeSeparator gibt. Wenn also der Schrägstrich bei 'dd/MM/yyyy' ein Platzhalter für DateSeparator ist, und der Doppelpunkt ein Platzhalter für TimeSeparator ist, dann ist das auch so zu verstehen. Also, wenn da ein Schrägstich ist, dann einfach den Schrägstrich durch DateSeparator ersetzen. Schon klappt das.

Uwe Raabe 8. Jun 2018 22:51

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von Alallart (Beitrag 1404317)
So richtig verstehe ich dein Problem nicht wirklich.

Überraschenderweise scheint das hier gerade ein sehr weit verbreitetes Phänomen zu sein.

Uwe Raabe 8. Jun 2018 22:55

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von KodeZwerg (Beitrag 1404315)
So bekomme ich in etwa das hin was Uwe schreibt

:gruebel:

Alallart 8. Jun 2018 23:30

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Vielleicht noch etwas - wie das Datumsformat aussehen soll steht in der ISO 8601.

KodeZwerg 9. Jun 2018 00:30

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1404321)
:gruebel:

Tut mir leid, mein Fehler, ich brachte Deinen Text mit diesen Ergebnissen durcheinander.
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;

TUX_der_Pinguin 11. Jun 2018 13:34

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1404320)
Zitat:

Zitat von Alallart (Beitrag 1404317)
So richtig verstehe ich dein Problem nicht wirklich.

Überraschenderweise scheint das hier gerade ein sehr weit verbreitetes Phänomen zu sein.

Ich hätte das wohl besser etwas verständlicher schreiben sollen, aber immerhin haben es ein paar ja doch verstanden. :zwinker:

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.

Uwe Raabe 11. Jun 2018 13:45

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1404536)
da es da wohl außer einer manuellen Übersetzung keine Lösung für gibt.

Wie auch. Die Übersetzung hängt ja nicht einmal von der aktuellen Windows-Sprache ab, sondern von der deines Programms (außer, du schreibst eine Shell-Extension oder sowas).

himitsu 11. Jun 2018 13:53

AW: Datumsformat (TT.MM.JJJJ) anzeigen
 
Zitat:

Zitat von TUX_der_Pinguin (Beitrag 1404024)
Ich will kein Datum formatieren sondern die Formatierung anzeigen.


So sollte es sein...
Zitat:

Bitte geben sie das Datum im Format TT.MM.JJJJ ein!
und so ist es im Moment
Zitat:

Bitte geben sie das Datum im Format dd/MM/yyyy ein!

Dann solltest du vorher besser einmal den Aufbau dieser Formatstrings lernen.

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 13:06 Uhr.
Seite 4 von 4   « Erste     234   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz