AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Datumsformat (TT.MM.JJJJ) anzeigen
Thema durchsuchen
Ansicht
Themen-Optionen

Datumsformat (TT.MM.JJJJ) anzeigen

Ein Thema von TUX_der_Pinguin · begonnen am 6. Jun 2018 · letzter Beitrag vom 11. Jun 2018
Antwort Antwort
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#1

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 10:09
Oder meintest Du es so?
Delphi-Quellcode:
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] = 'dthen tmp[i] := 'T';
     if tmp[i] = 'ythen tmp[i] := 'J';
   end;
 ShowMessage(tmp);
end.
Das zeigt Dir eventuell bei Englisch Windows mit Deutscher Einstellung zwei verschiedene Setups an?
Ps: Ergebnis bei mir ist: 2 x dd.MM.yyyy und zu letzt Dein TT.MM.JJJJ
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 8. Jun 2018 um 10:26 Uhr)
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 10:25
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;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 11:36
Schluss mit rumraten, Zeit für die Windows API:
Könntest Du mir helfen die Api mit meinem D2009 zu verschmelzen?
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;
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 GetLocaleInfoEx(const lpLocaleName: LPCWSTR; const LCType: LCTYPE; out lpLCData: LPWSTR; const cchData: integer): Integer; external kernel32 name 'GetLocaleInfoEx'; Aber ich bekomme das einfach nicht zum Laufen. Mein Delphi kennt noch kein TArray<WideChar>

Ps: Ein Beispiel Aufruf für den Code da oben schaut so aus ShowMessage(GLI(LOCALE_SSHORTDATE));
Gruß vom KodeZwerg

Geändert von KodeZwerg ( 8. Jun 2018 um 11:39 Uhr)
  Mit Zitat antworten Zitat
HolgerX

Registriert seit: 10. Apr 2006
Ort: Leverkusen
982 Beiträge
 
Delphi 6 Professional
 
#4

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 12:17
Hmm..

und auch da kommt nur 'dd.MM.yyyy' (Zumindestens bei mir)

Wie auch aus dem Post
https://www.delphipraxis.net/1404030-post4.html
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'.
https://docs.microsoft.com/de-de/dot...format-strings
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 12:42
@KodeZwerg:
TArray<WideChar> -> array of WideChar!

Kennt auch deine Version.
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 13:02
Danke TiGü, ich habe es jetzt so umgesetzt
Delphi-Quellcode:
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;
Ein Kompilat kann ich erzeugen aber der sagt dann immer "Unzulässige Attribute". Was mache ich noch falsch?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.073 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 13:26
Delphi-Quellcode:
function GetLocaleInfoEx(lpLocaleName: PWideChar; LCType: LCTYPE;
  lpLCData: PWideChar; cchData: Integer): Integer; stdcall; external kernel32 name 'GetLocaleInfoEx';
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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