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 1 von 4  1 23     Letzte »    
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#1

Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 09:39
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:
var
  FmtSet: TFormatSettings;

begin
  {$WARN SYMBOL_PLATFORM OFF}
  FmtSet := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT);
  {$WARN SYMBOL_PLATFORM ON}

  ShowMessage(FmtSet.ShortDateFormat);
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.
  Mit Zitat antworten Zitat
Benutzerbild von TRomano
TRomano

Registriert seit: 24. Nov 2004
Ort: Düsseldorf
190 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 10:15
Hallo,

ergibt aber das richtige Ergebnis:

Delphi-Quellcode:
var
  FmtSet: TFormatSettings;

begin
  {$WARN SYMBOL_PLATFORM OFF}
  FmtSet := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT);
  {$WARN SYMBOL_PLATFORM ON}

  ShowMessage(DateToStr(Now,FmtSet);
Gruß Thomas
Thomas Forget
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 10:30
Hallo,

ergibt aber das richtige Ergebnis:

Delphi-Quellcode:
var
  FmtSet: TFormatSettings;

begin
  {$WARN SYMBOL_PLATFORM OFF}
  FmtSet := TFormatSettings.Create(LOCALE_SYSTEM_DEFAULT);
  {$WARN SYMBOL_PLATFORM ON}

  ShowMessage(DateToStr(Now,FmtSet);
Gruß Thomas
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!
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.110 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 11:22
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] http://forums.codeguru.com/showthrea...indowsversions
[2] https://stackoverflow.com/q/12591993/2298252
[3] https://technet.microsoft.com/de-de/.../dd317787.aspx

Geändert von Der schöne Günther ( 6. Jun 2018 um 11:25 Uhr)
  Mit Zitat antworten Zitat
HolgerX

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 14:11
Hmm..

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.

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:
var
  FmtSet: TFormatSettings;

begin
  {$WARN SYMBOL_PLATFORM OFF}
  FmtSet := TFormatSettings.Create(LOCALE_USER_DEFAULT);
  {$WARN SYMBOL_PLATFORM ON}

  ShowMessage(FmtSet.ShortDateFormat);
Denn mit LOCALE_SYSTEM_DEFAULT werden die OS-Einstellungen gelesen, mit LOCALE_USER_DEFAULT die User-Einstellungen, welche dir auch von Windows angezeigt werden...
  Mit Zitat antworten Zitat
Alallart

Registriert seit: 8. Dez 2015
153 Beiträge
 
#6

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 14:12
@TUX_der_Pinguin

Hier eine kleine Funktion aus einem meiner Programme:
Delphi-Quellcode:
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;
Das habe ich so geregelt, weil ich das Datum und Uhrzeit unabhängig einer Landeseinstellung immer im gleichen Format speichern und lesen wollte.

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: Result.ShortDateFormat := 'dd#MM#yyyy' deaktivierst du sozusagen die Platzhalterfunktion. In dem Fall wird das Datum mit Rauten angezeigt. Ist es ein Schrägstrich, wird das Zeichen aus Result.DateSeparator 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).

Machen wir ein Beispiel:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  FS2: TFormatSettings;
begin
  FS2 := FS;
  ShowMessage(FormatDateTime(FS2.ShortDateFormat, Now, FS2));
end;
Änder nun diese Zeile:
Delphi-Quellcode:
const
  FS_Ger_DateSeparator = '~';
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.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 6. Jun 2018, 14:36
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 08:22
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.
Der Uwe hat's verstanden, es geht allein um den Hinweis Text. Wie er in den Windows Einstellungen auch zu sehen ist.

region.png

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:
var
  FmtSet: TFormatSettings;

begin
  {$WARN SYMBOL_PLATFORM OFF}
  FmtSet := TFormatSettings.Create(LOCALE_USER_DEFAULT);
  {$WARN SYMBOL_PLATFORM ON}

  ShowMessage(FmtSet.ShortDateFormat);
Denn mit LOCALE_SYSTEM_DEFAULT werden die OS-Einstellungen gelesen, mit LOCALE_USER_DEFAULT die User-Einstellungen, welche dir auch von Windows angezeigt werden...
Und ob ich jetzt 'LOCALE_SYSTEM_DEFAULT' oder 'LOCALE_USER_DEFAULT' verwende spielt keine Rolle ich bekomme immer nur das interne Format (z.B. dd/MM/yyyy) zurück. Bei dem Windows handelt es sich um Windows 7 Ultimate, welches auf deutsch eingestellt ist.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.289 Beiträge
 
Delphi 12 Athens
 
#9

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 08:38
Moin...

Imho haben die FormatSettings einen Bug was die Zeit betrifft.
https://www.delphipraxis.net/188843-...s-dummies.html

Zitat:
Bei dem Windows handelt es sich um Windows 7 Ultimate
Früher gab es mal Windows 7 Versionen die falsch installiert waren. Obwohl Deutsch eingestellt war, wurden die englischen Einstellungen geladen. Da half das Umstellen auf Englisch und wieder zurück.

Geändert von haentschman ( 8. Jun 2018 um 08:42 Uhr)
  Mit Zitat antworten Zitat
TUX_der_Pinguin

Registriert seit: 1. Jun 2005
Ort: Anholt (NRW)
608 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Datumsformat (TT.MM.JJJJ) anzeigen

  Alt 8. Jun 2018, 08:50
Moin...

Imho haben die FormatSettings einen Bug was die Zeit betrifft.
https://www.delphipraxis.net/188843-...s-dummies.html

Zitat:
Bei dem Windows handelt es sich um Windows 7 Ultimate
Früher gab es mal Windows 7 Versionen die falsch installiert waren. Obwohl Deutsch eingestellt war, wurden die englischen Einstellungen geladen. Da half das Umstellen auf Englisch und wieder zurück.
Wie gesagt es geht nicht um die Format Einstellungen, die sind meiner Meinung nämlich soweit in Ordnung, es geht um den lokalisierten Hinweis Text und wie man daran kommt. Irgendwie macht Windows das ja auch. Der Anwender soll einen Hinweis erhalten wie er ein Datum bzw. eine Uhrzeit eingeben soll und dieser Hinweis soll analog zu den Windows Regional Einstellungen sein. 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.

region.png
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 12:12 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