Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi IncMinute über 00:00 Uhr ?? (https://www.delphipraxis.net/47508-incminute-ueber-00-00-uhr.html)

goose33 12. Jun 2005 02:38


IncMinute über 00:00 Uhr ??
 
Hallo, kleines Problem mit IncMinute :

Also ich hab eine Zeit , z.B. 00:10 Uhr.
Jetzt möchte ich 30 minuten zurück, also
hab ich folgendes gemacht :

Delphi-Quellcode:
var
   bookDate : TTime;
   myHH, myMM, mySec, myMilli : Word;
begin
  bookDate := StrToDateTime('00:10');
  bookDate := IncMinute(bookDate, -30);
  DecodeTime(bookDate, myHH, myMM, mySec, myMilli);
end;
Komischerweise kommt da 00:20 raus ???

Also myHH = 0 und myMM = 20 ... wie das denn ?
Kommt IncMinute nicht damit klar das das über 00 Uhr geht ?

Matthias

jfheins 12. Jun 2005 07:18

Re: IncMinute über 00:00 Uhr ??
 
Hallo Matthias,

Incminute arbeitet schon richtig, du hast danach -20 min in deinem TTime stehen.

Allerdings schnippelt decodetime das Vorzeichen offensichtlich weg, und gibt dir (+) 20 min. aus.

Lösung:

Delphi-Quellcode:
var
   bookDate : TTime;
   myHH, myMM, mySec, myMilli : Word;
begin
  bookDate := StrToDateTime('00:10') + 2;
  bookDate := IncMinute(bookDate, -30);
  DecodeTime(bookDate, myHH, myMM, mySec, myMilli);

  showmessage (inttostr(myHH) + 'Std' + #13#10 + inttostr (myMM) + 'min' + #13#10 + inttostr (mySec) + 'sek' + #13#10 + inttostr (myMilli) + 'ms' + #13#10);
end;
Wenn du vorher ein, zwei Tage (egal) addierst, kommst du nicht in den negativen Bereich ;)

Die Muhkuh 12. Jun 2005 07:22

Re: IncMinute über 00:00 Uhr ??
 
Zitat:

Zitat von jfheins
Allerdings schnippelt decodetime das Vorzeichen offensichtlich weg, und gibt dir (+) 20 min. aus.

Irgendwie logisch oder? :zwinker: Oder war es bei dir schon 00:-20? ;)

alcaeus 12. Jun 2005 09:49

Re: IncMinute über 00:00 Uhr ??
 
Hallo ihr,

das Problem liegt nicht bei IncMinute, sondern bei der Zeit die verwendet wird, oder genauer gesagt der Tag. Mach mal folgendes:
Delphi-Quellcode:
bookDate := StrToDateTime('00:10');
ShowMessage(DateTimeToStr(bookdate));
bookDate := IncMinute(bookDate, -30);
ShowMessage(DateTimeToStr(bookdate));
Das Ergebnis der ShowMessages:
Code:
30.12.1899 00:10:00
30.12.1899 00:20:00
Mache ich hingegen folgendes:
Delphi-Quellcode:
bookDate := StrToDateTime('00:10');
Bookdate := Bookdate+1; //Darauf kommts an
ShowMessage(DateTimeToStr(bookdate));
bookDate := IncMinute(bookDate, -30);
ShowMessage(DateTimeToStr(bookdate));
In der markierten Zeile zaehle ich also einfach einen Tag zum Zeitstempel dazu, und jetzt sieht das Ergebnis so aus:
Code:
31.12.1899 00:10:00
30.12.1899 23:40:00
Das Problem liegt also darin, dass du vom "absoluten Nullpunkt" ausgehst. Du zaehlst also 10 Minuten dazu, dann 30 Minuten weg, und damit kommt Delphi aus irgendwelchen Gruenden nicht klar. Wie du gesehen hast, musst du dir einfach ein Datum reingeben, so dass du diesen Nullpunkt beim zurueckgehen nicht ueberschreitest.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 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