Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Datum / Zeit Vergleichen (https://www.delphipraxis.net/79945-datum-zeit-vergleichen.html)

WARP4 3. Nov 2006 08:13

Re: Datum / Zeit Vergleichen
 
Hallo,

vielleicht hilft auch ein Blick in die ESBDATES - Library. Diese Library (ist eigentlich "nur" eine Unit die man einbinden muss) enthält für sowas eine Menge Arithmetik- und Konvertierungsfunktionen.
Original kommt sie von ESB-Consultancy, ist aber meines Wissens "Freeware". Google einfach mal danach...

hoika 3. Nov 2006 08:31

Re: Datum / Zeit Vergleichen
 
Hallo,

wenn schon Time,
dann zu Beginn in eine lokale Variable packen,
sonst wird ja beim ersten Time (Vergleich) und beim zweiten u.U.
ein anderer Wert ermittelt (die Zeit läuft ja weiter).

Ein anderes Problem ist, dass Time auch die Millisekunden benutzt,
bei einem Vergleich könnte das Probleme geben.
Ich habe das über eine CutToMin Methode gelöst
Delphi-Quellcode:
function CutToMin(theTime: TDateTime): TDateTime;
var
  Hours, Min, Sec, MSec: Word;
begin
  DecodeTime(theTime, Hours, Min, Sec, MSec);
  Result:= EncodeTime(Hours, Min, Sec, 0)
end;
Heiko

exploitbashor 3. Nov 2006 14:30

Re: Datum / Zeit Vergleichen
 
also jetzt läufts besser! ich habe den vergleich jetzt mit der funktion comparetime(a,b :TDateTime) gemacht und er funktioniert!

das einzige was immer noch nicht geht ist der überschlag der auf den nächsten tag angerechnet wird. da muss der fehler bei dem ausrechnen liegen...

hoika 3. Nov 2006 15:40

Re: Datum / Zeit Vergleichen
 
Hallo,

Besorg die dunit,
füttere deine Testmethode mit Daten und debugge es einfach.

edit:
naja wolln wir mal nicht so sein ;)

kommt dir überhaupt hier rein ?
Delphi-Quellcode:
if ((now < strtotime(frueh)) and (now > strtotime(spaet))) then
NÖ!
Now kann nie kleiner UND grösser sein,
wenn schon, dann ODER

Delphi-Quellcode:
if ((now < strtotime(frueh)) OR (now > strtotime(spaet))) then
Was ich hier generell vermisse, ist das Datum.
Es wird hier ja nur mit Zeit gerechnet.
Der Trick ist, einfach 1 (eins) dazuzuaddieren (=24 Stunden),
da brauchst vielleicht später.


Heiko
PS: Mit F8 setzt man breakpoints. ;)

marabu 3. Nov 2006 21:00

Re: Datum / Zeit Vergleichen
 
Hallo,

ich würde einen anderen Ansatz wählen. Ich definiere eine ParkZeit analog zu TDateTime. Ein ParkTag dauert dann genau so lange, wie die auf der Parkuhr bekannt gegebene gebührenpflichtige Zeit. Der Einfachheit nehme ich an, dass die gebührenpflichtige Zeit ein einziger zusammenhängender Tageszeitraum ist. Wäre das die Zeit von morgens 9:00 Uhr bis abends 18:00 Uhr und hätte ich für zwanzig Stunden bezahlt, dann liefert mir DateTimeToStr(ParkzeitEnde(20/24, 9/24, 18/24)) den Aufdruck für mein Park-Ticket:

Delphi-Quellcode:
function ParkzeitEnde(dtBezahlt, dtBeginn, dtEnde: TDateTime): TDateTime;
begin
  // Berechne Beginn der gebührenpflichtigen Parkzeit
  if TimeOf(Now) < dtBeginn then Result := DateOf(Now) + dtBeginn
  else if TimeOf(Now) >= dtEnde then Result := DateOf(Now) + dtBeginn + 1
  else Result := Now;
  // Wandle von DateTime in "ParkTage"
  Result := Trunc(Result) + (Frac(Result) - dtBeginn) / (dtEnde - dtBeginn);
  // Berechne Ende der Parkzeit
  Result := Result + dtBezahlt / (dtEnde - dtBeginn);
  // Wandle "ParkTage" in DateTime
  Result := Trunc(Result) + Frac(Result) * (dtEnde - dtBeginn) + dtBeginn;
end;
Getippt und nicht getestet.

Grüße vom marabu

exploitbashor 4. Nov 2006 19:09

Re: Datum / Zeit Vergleichen
 
danke für die viele hilfe, aber ich würds lieber so lassen wies ist, größtenteils funktionierts ja auch. das einzige was nicht geht ist irgendwie zwei zeiten zu subtrahieren... leider


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:43 Uhr.
Seite 2 von 2     12   

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 by Thomas Breitkreuz