![]() |
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... |
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:
Heiko
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; |
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... |
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:
NÖ!
if ((now < strtotime(frueh)) and (now > strtotime(spaet))) then
Now kann nie kleiner UND grösser sein, wenn schon, dann ODER
Delphi-Quellcode:
Was ich hier generell vermisse, ist das Datum.
if ((now < strtotime(frueh)) OR (now > strtotime(spaet))) then
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. ;) |
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:
Getippt und nicht getestet.
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; Grüße vom marabu |
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. |
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