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
Seite 3 von 4     123 4      
Benutzerbild von KodeZwerg
KodeZwerg

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

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.060 Beiträge
 
Delphi 10.4 Sydney
 
#22

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
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 13:32
Danke fürs korrigieren aber ich erhalte dabei einen leeren String. screenshot-08_06.png
Mein Delphi und ich machen da noch irgendwas falsch.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
TiGü

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

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

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 13:54
So klappt es, vielen Dank!

Hier nochmal für HolgerX wegen fehlender Konstanten zum nachvollziehen:
Delphi-Quellcode:
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;
Aber das Ergebnis bleibt auch hier = dd.MM.yyyy
also irgendwie alles das gleiche nur eine andere Möglichkeit
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
HolgerX

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 14:04
Hmm..

Aber das Ergebnis bleibt auch hier = dd.MM.yyyy
also irgendwie alles das gleiche nur eine andere Möglichkeit
Hatte ich doch schon geschrieben, dass mit dem dd.MM.yyyy

Es scheint keine API zu geben, um das 'TT.MM.JJJJ' zu erhalten, dies macht anscheinend der Windows-Dialog selber....
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#27

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 14:10
Es scheint keine API zu geben, um das 'TT.MM.JJJJ' zu erhalten, dies macht anscheinend der Windows-Dialog selber....
Exakt!
https://www.delphipraxis.net/1404242-post13.html

Zitat:
Windows setzt diese Strings aus den Format-Strings anhand der aktuellen Sprache zusammen. Also ähnlich wie FormatDateTime, aber anstatt der Ziffern werden die entsprechenden Buchstaben (in Deutsch T, M und J) für Tag, Monat und Jahr eingesetzt. Die sprachabhängigen Buchstaben liegen als Resourcestrings in den verschiedenen mui-Dateien der intl.cpl. Welche davon genommen wird hängt von der aktuellen Sprache ab.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.007 Beiträge
 
Delphi 12 Athens
 
#28

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 14:15
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
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 15:31
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:
 ShowMessage('GLIx: ' + GLIx(LOCALE_SSHORTDATE));
 ShowMessage('GLI: ' + GLI(LOCALE_SSHORTDATE));
 ShowMessage('TFormatSettings:' + GetFmtSet);
Alle Varianten liefern "dd.MM.yyyy" als Ergebnis, ist es Geschmacksfrage oder gibt es da noch ein Richtig/Falsch ?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
EWeiss
(Gast)

n/a Beiträge
 
#30

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 16:34
Zitat:
Alle Varianten liefern "dd.MM.yyyy" als Ergebnis, ist es Geschmacksfrage oder gibt es da noch ein Richtig/Falsch ?
Wurde doch schon beantwortet oder?

gruss
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      


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 07:52 Uhr.
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