AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Delphi-PRAXiS - Lounge Betriebssysteme Falsches ShortDateFormat unter Windows 7
Thema durchsuchen
Ansicht
Themen-Optionen

Falsches ShortDateFormat unter Windows 7

Ein Thema von trashcandesign · begonnen am 27. Nov 2009 · letzter Beitrag vom 27. Sep 2011
Antwort Antwort
trashcandesign

Registriert seit: 21. Feb 2006
Ort: Mühlhausen
187 Beiträge
 
Delphi XE2 Professional
 
#1

Falsches ShortDateFormat unter Windows 7

  Alt 27. Nov 2009, 15:13
Moin,

wir formatieren unsere Datums-Felder mit dem ShortDateFormat um die Datumsanzeige entsprechend den Windowsländereinstellungen zu formatieren.

Bisher hat das auch wunderbar funktioniert.
Nun habe ich heute ein Windows 7 32Bit aufgesetzt und plötzlich gab mir das ShortDateFormat M/d/yyyy zurück, obwohl in den Ländereinstellungen das Format auf dd.MM.yyyy gesetzt wurde.


Das
GetLocaleInfo(LOCALE_USER_DEFAULT, LOCALE_SSHORTDATE, PAnsiChar(test), 20); hat mir das richtige Ergebnis geliefert, aber

GetLocaleFormatSettings(LOCALE_USER_DEFAULT, Formatsettings); wieder das falsche?!


Soweit ich das verstanden habe hat GetLocaleFormatSettings GetThreadLocale als DefaultLCID gesetzt.
Und die ThreadLocale gab dann wieder das Ami-Format zurück. Warum auch immer.

ich habe dann auf der Seite nachgelesen, dass man mal die Lokalen Ländereinstellungen ändern und wieder zurück setzen soll. Das hat dann auch bei mir funktioniert und unser Programm hat dann wieder das richtige Format ausgegeben.

Das Windows 7 war eine Multi-Language Version, die dann bei der Installation auf Deutsch gesetzt wurde.
Bei einer rein deutschen Version ist dieses Problem nicht aufgetreten.
Wir setzen momentan Delphi 2006 ein.

Nun meine Frage: Hat das Problem schon mal jemand gehabt? Weiß vielleicht jemand, woran das Problem genau liegt und ob das mit der aktuellen Delphi-Version auch noch auftritt?

Und warum gibt IsValidLocale(LOCALE_USER_DEFAULT, LCID_INSTALLED) 0 zurück?
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 15:03
Hallo zusammen und sorry für das Ausgaben dieses alten Threads.

Da die Thematik ja leider immer aktueller wird, würde mich interessieren, wie man das Problem diagnostizieren oder Lösen kann, da ich bei meinen Installationen kurzfristig eine Lösung dafür anbieten muss; speziell Zugeschnitten auf die deutschen Kunden.

Das Problem trifft mittlerweile auf fast allen PC von großen Händler oder innerhalb großer Firmen auf, da diese meistens -wie erwähnt- die Multilingual-Version von Windows 7 haben.

Meine Idee wäre es, die Ländereinstellungen auszulesen. Wenn diese = Deutsch, dann versuche ob von irgend einem festen Datum mit Zeit der String für ShortDateFormat = dem String für dd.mm.yy(yy?) für dieses Datum ist, und der String für die Uhrzeit (z.B. 13 Uhr wegen am/pm) von ShortTimeFormat = HH:nn ist, im Sinne von

if FormatDateTime('t', 13/24) = FormatDateTime('HH:nn', 13/24) then begin ...

Wenn nicht, frage den Benutzer ob die Ländereinstellungen ein Mal kurz auf Englisch (USA) und dann wieder auf Deutsch gesetzt werden sollen, damit im kompletten System die selben Einstellungen gelten.


Alternativ bin ich auch für andere Ideen und Denkansätze sehr dankbar, wie Ihr das löst. Wie bist Du verblieben, trashcandesign?

Die Kunden wundert's halt, dass Datum und Zeit in einigen Programmen auf Englisch ist...


Mir ist klar, dass hier im Forum dieses Problem schon oft diskutiert wurde (Lösung: Ländereinstellungen manuell auf Englisch und wieder zurück), aber die Frage ist, ob man dem Benutzer anbieten sollte, dieses erkannte Problem automatisch lösen zu lassen.

http://www.delphipraxis.net/148784-w...umsformat.html
http://www.delphipraxis.net/152005-w...instellun.html

Edit 1: Hat jemand im Kopf, ob und wie ich dieses manuelle Umstellen über Delphi simulieren kann? Mit SetLocaleFormatSettings oder wie? Naja, mal SuFu nutzen...

Edit 2: Hier im Forum nix sinnvolles gefunden. Google bringt HKEY_USERS\.DEFAULT\Control Panel\International zu Tage. Ich habe leider jetzt kein betroffenes System greifbar um das zu testen, aber es könnte sein, dass hier oder in einem anderen Key das abweichende Format notiert ist. Dann würde es ja langen, die Einstellungen in der Registry zu kopieren. Hat jemand ein MUI System mit dem genannten Problem und kann mir sagen, ob HKEY_USERS\.DEFAULT\Control Panel\International von HKEY_CURRENT_USER\Control Panel\International unterschiedliche Formate nutzen?

Geändert von berens (26. Sep 2011 um 15:18 Uhr)
  Mit Zitat antworten Zitat
mjustin

Registriert seit: 14. Apr 2008
3.006 Beiträge
 
Delphi 2009 Professional
 
#3

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 16:17
Eventuell hilft dieser Thread weiter:

Should GetThreadLocale become deprecated?
https://forums.embarcadero.com/threa...60433&tstart=0

Zitat:
As discussed on Stackoverflow, GetThreadLocale returns different value
than GetUserDefaultLCID
(http://stackoverflow.com/questions/1...serdefaultlcid).
As one of the answers said, it occurs because Microsoft seems to be in
the process of deprecating the Locale ID in favor of the Locale Name. So
should Delphi reflect this process by deprecating GetThreadLocale?
Die Lösung wäre getuserdefaultlcid zu verwenden, wenn ich es richtig gelesen habe.
Michael Justin
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#4

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 17:27
Soweit ich weiss kann man auch für das eigene Programm die Einstellungen unabhängig von Windows vornehmen. Meine einfach ins create des Hauptforms folgendes rein setzten:

Code:

DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
LongDateFormat := 'dddd, dd.mmmm.yyyy';
DecimalSeparator := ',';
ThousandSeparator := '.';
CurrencyString := '€';
Philip
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#5

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 17:40
Soweit ich weiss kann man auch für das eigene Programm die Einstellungen unabhängig von Windows vornehmen. Meine einfach ins create des Hauptforms folgendes rein setzten:
Aufpassen: Wenn zur Laufzeit die Systemeinstellungen geändert werden, dann reagieren Delphi-Programme gerne mal darauf und überschreiben diese Werte wieder.
Denn Windows sendet dabei eine systemweite Notification (Message).

Wenn möglich stattdessen eine eigene Variable Delphi-Referenz durchsuchenTFormatSettings erstellen und diese direkt verwenden.
Viele Funktionen unterstützen einen entsprechenden Parameter, siehe z.B. Delphi-Referenz durchsuchenTimeToStr.


Code:

DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
LongDateFormat := 'dddd, dd.mmmm.yyyy';
DecimalSeparator := ',';
ThousandSeparator := '.';
CurrencyString := '€';
In neueren Delphis bitte auf das hören, was einem der Compiler dazu sagt.
var DecimalSeparator: Char deprecated 'Use FormatSettings.DecimalSeparator';
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (26. Sep 2011 um 17:43 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 17:41
Soweit ich weiss kann man auch für das eigene Programm die Einstellungen unabhängig von Windows vornehmen. Meine einfach ins create des Hauptforms folgendes rein setzten:

Code:

DateSeparator := '.';
ShortDateFormat := 'dd.mm.yyyy';
LongDateFormat := 'dddd, dd.mmmm.yyyy';
DecimalSeparator := ',';
ThousandSeparator := '.';
CurrencyString := '€';
Und warum bist du dir so sicher, dass mein Datumsformat dd.mm.yyyy ist?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Darlo

Registriert seit: 28. Jul 2008
Ort: München
1.196 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Falsches ShortDateFormat unter Windows 7

  Alt 26. Sep 2011, 17:42

Werde ich beachten...
Philip
  Mit Zitat antworten Zitat
berens

Registriert seit: 3. Sep 2004
434 Beiträge
 
Delphi 10.4 Sydney
 
#8

AW: Falsches ShortDateFormat unter Windows 7

  Alt 27. Sep 2011, 10:34
Zitat:
Die Lösung wäre getuserdefaultlcid zu verwenden, wenn ich es richtig gelesen habe.
Das Problem an der Sache ist ja, dass sowohl FormatDateTime wie auch Komponenten (TMonthCalendar, TDateTimePicker) das englische Format übernehmen, obwohl überall in Windows das deutsche Format zu sehen ist. Z.B. Uhr und Datum in der Taskleiste: alles Deutsch.

Dementsprechend möchte ich mich dem Format anpassen, das die Uhr und das Datum in der Taskleiste verwenden. Damit kann ich einerseits prüfen, ob ShortTimeFormat das korrekte Format zurück gibt, andererseits zwinge ich dem Benutzer nicht automatisch das HH:nn Format auf, wenn Leute wie Luckie da etwas getuned haben

Da FormatDateTime und die angesprochenen Komponenten, sagen wir, "High-Level"-Komponenten sind (also fix-und-fertig Programmiert, da kann/soll/will ich nichts mehr dran ändern), bringt mit die Lösung mit "getuserdefaultlcid" nichts.

"ShortDateFormat := 'dd.mm.yyyy'; " etc. Lösen zwar mein Problem, und das der traditionellen deutschen Kunden, aber spätestens bei den ausländischen Kunden gibt es dann -logischerweise- Probleme.

Ich versuche mir gerade eine "Testversion" von Windows 7 zu beschaffen, um das Problem nachzustellen; vielleicht kann man ja wirklich über die Registry-Einträge etwas machen...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
 
Delphi 12 Athens
 
#9

AW: Falsches ShortDateFormat unter Windows 7

  Alt 27. Sep 2011, 10:58
Es ist halt ein Fehler in Windows, welcher sich durch eine schlechte Konfiguration zeigt.

Der beste Weg ist also dieses in Windows zu beseitigen, anstatt nachträglich drann rumzudoktern.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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 08:39 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