Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   TryStrToDateTime fehlerhaft? (https://www.delphipraxis.net/216080-trystrtodatetime-fehlerhaft.html)

Amateurprofi 24. Okt 2024 01:48

TryStrToDateTime fehlerhaft?
 
Delphi XE2
Windows 7

Delphi-Quellcode:
var DT:TDateTime;
begin
   if TryStrToDateTime('1.1.20255',DT) then begin
      ShowMessage(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz',DT));
   end else begin
      ShowMessage('Fehler');
   end;
end;
Ergibt "01.01.2025 00:00:00.000".
Ich hätte erwartet, dass die Jahreszahl "20255" zu einem Fehler führt.

DeddyH 24. Okt 2024 05:54

AW: TryStrToDateTime fehlerhaft?
 
Wieso, ist das kein gültiges Datum? Unsinnig vielleicht, aber nicht ungültig.

dummzeuch 24. Okt 2024 08:29

AW: TryStrToDateTime fehlerhaft?
 
Zitat:

Zitat von Amateurprofi (Beitrag 1542494)
Delphi XE2
Windows 7

Delphi-Quellcode:
var DT:TDateTime;
begin
   if TryStrToDateTime('1.1.20255',DT) then begin
      ShowMessage(FormatDateTime('dd.mm.yyyy hh:nn:ss.zzz',DT));
   end else begin
      ShowMessage('Fehler');
   end;
end;
Ergibt "01.01.2025 00:00:00.000".
Ich hätte erwartet, dass die Jahreszahl "20255" zu einem Fehler führt.

Ich hätte die Ausgabe "01.01.20255 00:00:00.000" erwartet, denn 20255 ist ja durchaus ein gültiges Datum. 1.1.2025 ist aber definitiv die falsche Ausgabe. Ob aber jetzt TryStrToDateTime oder FormatDateTime fehlerhaft ist, kann man nur sagen, wenn man den Wert von dt nach der Konvertierung kennt.

Edit: Hm, ich habe es gerade ausprobiert: In Delphi 2007 liefert TryStrToDateTime tatsächlich False.

Laut Doku:
"The maximal correct date supported by TDateTime values is limited to 12/31/9999 23:59:59:999"

Demnach sollte TryStrToDatTime wohl tatsächlich False liefern, wenn es korrekt implementiert ist.

BlueStarHH 24. Okt 2024 09:03

AW: TryStrToDateTime fehlerhaft?
 
Was passiert, wenn Du das Jahr mit 5x y ausgibst? Also:

Delphi-Quellcode:
 ShowMessage(FormatDateTime('dd.mm.yyyyy hh:nn:ss.zzz',DT));

himitsu 24. Okt 2024 09:05

AW: TryStrToDateTime fehlerhaft?
 
probier es?

Uwe Raabe 24. Okt 2024 09:54

AW: TryStrToDateTime fehlerhaft?
 
Der Scan hört beim Jahr einfach nach maximal vier Ziffern auf und ignoriert den Rest bis zum nächsten Trennsymbol. Ich empfehle daher einen Bugreport.

Amateurprofi 24. Okt 2024 10:34

AW: TryStrToDateTime fehlerhaft?
 
Zitat:

Zitat von DeddyH (Beitrag 1542496)
Wieso, ist das kein gültiges Datum? Unsinnig vielleicht, aber nicht ungültig.

Ich hatte nicht behauptet, das sei kein gültiges Datum. LOL
Richtig ist, das '1.1.20255' ein gültiges Datum ist.
Richtig ist aber auch, dass '1.1.20255' kein gütiges TDateTime ist.
Zitat:

Das höchste von TDateTime-Werten unterstützte korrekte Datum ist 31.12.9999 23:59:59:999
Da das Datum in ein TDateTime gestellt wird, sollte bei einem Datum, das nicht einem TDateTime entspricht, als Funktionsergebnis False geliefert werden.

himitsu 24. Okt 2024 10:55

AW: TryStrToDateTime fehlerhaft?
 
TDateTime kann wesentlich mehr darstellen,
aber die anderen API, welche in dessen Zusammenhang genutzt werden, z.B. der SystemTime-Record, sind aber beschränkt.
Sowie Funktionen für das Editieren des Wertes, sowie beim Konvertieren von und zu Strings.

Außerdem wird TDateTime etwas ungenauer, je weiter man von 1900 abweicht. (je größer der Teil vor dem Komma, um so weniger gibt es hinter dem Komma)

1 Millisekunde = 0,000000011574
bei 15 bis 16 signifikanten Stellen des TDateTime aka Double, nja ...
Code:
      0,000000011574
1234567,89012345
9999999 = 27378 Jahre
 999999 =  2738 Jahre

1900 + 2738  =  4638
1900 + 27378 = 29278
In 2500 Jahren wird also die letzte Millisekunde anfangen schwammig zu werden.
Und bei deinen ~20.000 Jahren ist sie dann ganz weg ... isses dann halt nur noch 'ne Hundertstelsekunde genau.

Amateurprofi 24. Okt 2024 11:12

AW: TryStrToDateTime fehlerhaft?
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1542505)
Der Scan hört beim Jahr einfach nach maximal vier Ziffern auf und ignoriert den Rest bis zum nächsten Trennsymbol. Ich empfehle daher einen Bugreport.

Danke, Uwe.
Erscheint mir überflüssig (Delphi XE2), hab es trotzdem gemacht.

Uwe Raabe 24. Okt 2024 11:13

AW: TryStrToDateTime fehlerhaft?
 
Ist unter 12.2 immer noch so. Daher, Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr.
Seite 1 von 2  1 2      

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