![]() |
TryStrToDateTime fehlerhaft?
Delphi XE2
Windows 7
Delphi-Quellcode:
Ergibt "01.01.2025 00:00:00.000".
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; Ich hätte erwartet, dass die Jahreszahl "20255" zu einem Fehler führt. |
AW: TryStrToDateTime fehlerhaft?
Wieso, ist das kein gültiges Datum? Unsinnig vielleicht, aber nicht ungültig.
|
AW: TryStrToDateTime fehlerhaft?
Zitat:
Edit: Hm, ich habe es gerade ausprobiert: In Delphi 2007 liefert TryStrToDateTime tatsächlich False. Laut ![]() "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. |
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));
|
AW: TryStrToDateTime fehlerhaft?
probier es?
|
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.
|
AW: TryStrToDateTime fehlerhaft?
Zitat:
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:
|
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:
In 2500 Jahren wird also die letzte Millisekunde anfangen schwammig zu werden.
0,000000011574
1234567,89012345 9999999 = 27378 Jahre 999999 = 2738 Jahre 1900 + 2738 = 4638 1900 + 27378 = 29278 Und bei deinen ~20.000 Jahren ist sie dann ganz weg ... isses dann halt nur noch 'ne Hundertstelsekunde genau. |
AW: TryStrToDateTime fehlerhaft?
Zitat:
Erscheint mir überflüssig (Delphi XE2), hab es trotzdem gemacht. |
AW: TryStrToDateTime fehlerhaft?
Ist unter 12.2 immer noch so. Daher, Danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:24 Uhr. |
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