AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TryStrToDateTime fehlerhaft?

Ein Thema von Amateurprofi · begonnen am 24. Okt 2024 · letzter Beitrag vom 24. Okt 2024
Antwort Antwort
Seite 1 von 2  1 2      
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#1

TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 02:48
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 06:54
Wieso, ist das kein gültiges Datum? Unsinnig vielleicht, aber nicht ungültig.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.623 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 09:29
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.
Thomas Mueller
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hamburg
850 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 10:03
Was passiert, wenn Du das Jahr mit 5x y ausgibst? Also:

 ShowMessage(FormatDateTime('dd.mm.yyyyy hh:nn:ss.zzz',DT));
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 10:05
probier es?
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 10:54
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#7

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 11:34
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 11:55
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.
$2B or not $2B

Geändert von himitsu (24. Okt 2024 um 15:42 Uhr)
  Mit Zitat antworten Zitat
Amateurprofi

Registriert seit: 17. Nov 2005
Ort: Hamburg
1.077 Beiträge
 
Delphi XE2 Professional
 
#9

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 12:12
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.
Gruß, Klaus
Die Titanic wurde von Profis gebaut,
die Arche Noah von einem Amateur.
... Und dieser Beitrag vom Amateurprofi....
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: TryStrToDateTime fehlerhaft?

  Alt 24. Okt 2024, 12:13
Ist unter 12.2 immer noch so. Daher, Danke!
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:40 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