Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fehler in EncodeDateTime für 24 Uhr (https://www.delphipraxis.net/165383-fehler-encodedatetime-fuer-24-uhr.html)

KPBecker 27. Dez 2011 18:06

Delphi-Version: 2007

Fehler in EncodeDateTime für 24 Uhr
 
Hallo, Delphi-Praktiker,

die Dokumentation schreibt, daß bei EncodeDateTime für Stunde = 24 dann Minute, Sekunde und Millisekunde Null sein müssen, das ist auch plausibel.

Mein Problem: Diese Konstellation führt zu einem Laufzeitfehler:
"... Exception der Klasse EConvertError mit der Meldung '2011.9.20 24:0:0,0' ist keine gültige Datums- und Uhrzeitangabe ...":

Ist das nur bei mir oder nur in dieser Delphi-Version (2010, nicht 2007) so?

Mit besten Grüßen
Klaus-Peter

guinnes 27. Dez 2011 18:29

AW: Fehler in EncodeDateTime für 24 Uhr
 
Hast du auf einer Digitaluhr schon mal 24:00:00 gesehen ?

KPBecker 27. Dez 2011 18:34

AW: Fehler in EncodeDateTime für 24 Uhr
 
Hallo, Guiness,

die Frage bezog sich eher nicht auf meine Digitaluhr.
Ich bekomme Datum/Uhrzeit geliefert und möchte es in TDateTime umsetzen.
Laut Delphi-Doku soll 24:00:00 ja auch möglich sein ! (URL="http://docwiki.embarcadero.com/VCL/de/DateUtils.EncodeDateTime"][/URL]

Klaus-Peter

himitsu 27. Dez 2011 18:49

AW: Fehler in EncodeDateTime für 24 Uhr
 
Auf welche Doku beziehst du dich denn?
Meine D2010-OH meint genau das Selbe wie Delphi-Referenz durchsuchenTDateTime und da seh ich nichts davon.

[edit]
Unverlinkten Link übersehn ... mal sehn ...

Hmmm, Delphi-Referenz durchsuchenEncodeDateTime nutzt intern Delphi-Referenz durchsuchenTryEncodeTime und dort findet man sowas
Delphi-Quellcode:
function TryEncodeTime(Hour, Min, Sec, MSec: Word; out Time: TDateTime): Boolean;
begin
  Result := False;
  if (Hour < HoursPerDay) and (Min < MinsPerHour) and (Sec < SecsPerMin) and (MSec < MSecsPerSec) then
    ...
Also nichts mit 24:00:00:000.
Dann stimmt wohl die OH nicht mehr mit dem Code überein.

jaenicke 27. Dez 2011 18:50

AW: Fehler in EncodeDateTime für 24 Uhr
 
Das ist ein Fehler in der Dokumentation. Ein schneller Blick in den Quelltext zeigt, dass das explizit abgefangen wird:
Delphi-Quellcode:
  if (Hour < HoursPerDay) and (Min < MinsPerHour) and (Sec < SecsPerMin) and (MSec < MSecsPerSec) then
// wobei HoursPerDay natürlich 24 ist, daher geht nur bis 23
// EDIT:
Das müsste also <= HoursPerDay sein, damit das geht. Das wirst du also schnell selbst berechnen müssen.

@himitsu:
Er hat den Link ja jetzt auch angegeben:
Zitat:

Gültige Stundenwerte liegen zwischen 0 und 24. (Wird 24 als Wert für die Stunden angegeben, müssen die Werte für Minute, Sekunde und Millisekunde Null sein, da der resultierende TDateTime-Wert Mitternacht zum Ende des angegebenen Tages und damit den Anfang des nächsten Tages repräsentiert).

himitsu 27. Dez 2011 19:01

AW: Fehler in EncodeDateTime für 24 Uhr
 
Jupp, und in Delphi 7 war das auch bereits so ... da stimmt die OH wohl schon eine ganze Weile nicht mehr.

KPBecker 27. Dez 2011 19:09

AW: Fehler in EncodeDateTime für 24 Uhr
 
Tja, so isses dann halt mal.

Vielen Dank,
Klaus-Peter


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf