AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Merkwürdigkeiten mit FormatSettings.ShortDateFormat
Thema durchsuchen
Ansicht
Themen-Optionen

Merkwürdigkeiten mit FormatSettings.ShortDateFormat

Ein Thema von boettcher · begonnen am 5. Mär 2024 · letzter Beitrag vom 5. Mär 2024
Antwort Antwort
boettcher

Registriert seit: 21. Nov 2003
4 Beiträge
 
#1

Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 12:29
Delphi-Version: 12 Athens
Ich bin auf Merkwürdigkeiten bei der Verwendung von FormatSettings.ShortDateFormat gestoßen.

Ich habe ein Programm von RAD Studio 2007 auf RAD Studio Athens umgestellt (zwar C++, aber das sollte keinen Unterschied zu Delphi machen).

In diesem alten Thema ...

https://www.delphipraxis.net/169768-...ateformat.html

... habe ich folgende Aussage zu FormatSettings.ShortDateFormat gefunden:

Zitat:
Bei Delphi 7 und 2009 -> 'dd.mm.yyyy'
Bei Delphi XE2 -> 'dd/mm/yyyy'
Mit RAD Studio 2007 hatte ich auch immer den Wert "dd.mm.yyyy". Aussage passt hier also.
Mit Athens erstellt ist es bei mir und einem Teil der Anwender allerdings 'dd.mm.yyyy' und bei einigen Anwendern 'dd/mm/yyyy'. Also der Wert nicht immer identisch.

Frage 1: Weiß jemand wie dieser Unterschied zustande kommt (Windows-Version/-Einstellungen/...)?

Nun könnte man meinen, dass das in der Praxis keinen Unterschied macht, sofern man dazu noch FormatSettings.DateSeparator berücksichtigt.

Ich verwende eine Datumkonvertierung ähnlicher Art (hier vereinfachter Code):
Code:
UnicodeString ConvertDate( UnicodeString Datum )
{
   TDateTime dt;


   FormatSettings.DateSeparator = '.';
   FormatSettings.ShortDateFormat = "dd/mm/yyyy"; // alternativ "dd.mm.yyyy"

   dt = StrToDateDef( Datum , -1 );
   if ( (int)dt != -1 ) {

      FormatSettings.DateSeparator = '.';
      FormatSettings.ShortDateFormat = "dd.mm.yyyy";

      Datum = DateTimeToStr( dt );

   }

   return( Datum );
}
Ich übergebe der Funktion den Wert "1902". Was wäre als Ergebnis zu erwarten?

Bei Verwendung von ...
Code:
FormatSettings.ShortDateFormat = "dd/mm/yyyy";
... erhalte ich den Rückgabewert "19.02.2024".

Bei Verwendung der Alternative ...
Code:
FormatSettings.ShortDateFormat = "dd.mm.yyyy";
... den Rückgabewert "1902" - also den Eingabewert, weil die StrToDateDef-Funktion -1 zurückliefert.

Ich finde die Ergebnisse überraschend.

Frage 2: Bug, Feature oder Denkfehler meinerseits?

Gruß, Dirk
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.093 Beiträge
 
Delphi 12 Athens
 
#2

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 15:51
https://docwiki.embarcadero.com/Libr...s.StrToDateDef

Zitat:
Mit StrToDateDef kann ein String in eine Datumsangabe zerlegt werden. Enthält S kein gültiges Datum, gibt StrToDateDef Default zurück.

Der String S muss aus zwei oder drei Zahlen bestehen, die durch das in der globalen Variable DateSeparator bzw. deren TFormatSettings-Entsprechung definierte Zeichen voneinander getrennt sind. Die Reihenfolge von Tag, Monat und Jahr wird von der globalen Variable ShortDateFormat bzw. deren TFormatSettings-Entsprechung bestimmt (mögliche Kombinationen sind M/T/J, T/M/J und J/M/T).

Enthält der String S lediglich zwei Zahlen, wird er als Datum (M/T oder T/M) des aktuellen Jahres interpretiert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 16:28
Im StrToDate, bzw. der internen Funktion darin, wurde in D11 so Eniges umgebaut.
https://www.delphipraxis.net/210022-...r-richtig.html

Das Globale FormatSetting umzuschreiben, ist eh keine gute Idee.
Aus diesem Grund haben viele das Datums-/Zeitfunktionen auch noch einen entsprechenden FormatSettings-Parameter.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 16:32
Ach ja, in Vorinstallierten Windowsen einiger Computer-Hersteller ist ein Bug, seit Jahrzehnten.

Im Windows gibt es mehrere Stellen, wo das "aktuelle" Datumsformat gespeichert wurde.
einige neuere API verwenden die neue Stelle,
aber gewisse API (welche Delphi benutzt) verwenden die alte Stelle.

Leider wurde in der Installation das Datum manuell in der Registry nur teilweise gesetzt.
In den Windowseinstelltungen das Datumsformat einmal auf was Anderes einstellen (z.B. englisch) und dann wieder zurück auf Deutsch, womit dann alle wichtigen Stellen richtig gespeichert sind.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu ( 5. Mär 2024 um 16:59 Uhr)
  Mit Zitat antworten Zitat
boettcher

Registriert seit: 21. Nov 2003
4 Beiträge
 
#5

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 18:25
Der Text war mir bekannt ...
Zitat:
Enthält der String S lediglich zwei Zahlen, wird er als Datum (M/T oder T/M) des aktuellen Jahres interpretiert.
"1902" würde ich nicht zwingend als "zwei Zahlen" ansehen - und der gesamte Text lässt erwarten, dass ein Datumstrenner dazwischen sein muss.

Nichts desto trotz verwundert es, dass es bei "dd/mm/yyyy" ein anderes Ergebnis gibt als bei "dd.mm.yyyy".

- Dirk
  Mit Zitat antworten Zitat
boettcher

Registriert seit: 21. Nov 2003
4 Beiträge
 
#6

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 18:36
Aus diesem Grund haben viele das Datums-/Zeitfunktionen auch noch einen entsprechenden FormatSettings-Parameter.
Und was übergibt man dann einer solchen Funktion als ShortDateFormat?
"dd/mm/yyyy" oder "dd.mm.yyyy"?
Wo ich doch auf unterschiedlichen Rechnern unterschiedliche Werte auslese.
In den Windowseinstelltungen das Datumsformat einmal auf was Anderes einstellen (z.B. englisch) und dann wieder zurück auf Deutsch, womit dann alle wichtigen Stellen richtig gespeichert sind.
Das kann man als Entwickler mal so machen, aber nichts, was man seinen Kunden raten kann, falls sie mal Probleme feststellen.

- Dirk
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

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

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 21:30
Sorry, es ist ein Bug im Windows, also gehört er auch dort gelöst.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: Merkwürdigkeiten mit FormatSettings.ShortDateFormat

  Alt 5. Mär 2024, 23:22
Frag mich nicht ob das so beabsichtigt ist, aber man kann bei ShortDateFormat := 'dd/mm/yyyy'; den 19.Februar 2024 (und zumindest in diesem Jahr) auch auf folgende Weise eingeben: "1902", "190224" oder "19022024".
Der aktuell eingestellte DateSeparator ist dabei egal, solange es kein Blank ist.

Die ScanDate Funktion checkt zwar auf den DateSeparator, nimmt ihn aber implizit an wenn keiner da ist.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  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 18:43 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