Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Berechnung von Zeitdifferenzen
Das S - Do 23.10.03 07:53
Titel: Berechnung von Zeitdifferenzen
Hi,
ich bin gerade dabei, eine Reisekostenabrechnung zu schreiben. Nun habe ich folgendes Problem, welches ich mit einem Beispiel beschreiben möchte:
Ich fahre für einen Kundenbesuch am 21.05.2003 um 15.00 Uhr los und komme am 24.05.2003 um 19.00 Uhr wieder zurück.
Das Programm soll mir nun ausrechnen,
1. wieviel volle Tage in diesem Zeitraum lagen (in diesem Beispiel zwei, der 22.05.2003 und der 23.05.2003)
2. wieviel von den "nicht vollen Tagen" mehr als 8 Stunden hatte aber weniger als 14 (in diesem Beispiel einer, nämlich am 21.05.2003 von 15.00 Uhr bis 24 Uhr=9 Stunden)
3.) wieviel von den "nicht vollen Tagen" mehr als 14 Stunden hatte aber weniger als 24 Stunden (in diesem Beispiel einer am 24.05.2003 von 0.00 Uhr bis 19.00 Uhr=19 Stunden)
alles andere, also weniger als 8 Stunden soll er garnicht erst beachten bzw. berechnen.
Ich zerbreche mir hier den Kopf aber ich komme da nicht daruf. Die Eingabe der Daten erfolgt in vier Textfelder.
Vielen Dank für Eure Mühen
Schöne Grüße
Das S
barfuesser - Do 23.10.03 09:04
Sieh mal in der Onlinehilfe unter Datum/Zeit (Routinen) nach. Da solltest Du finden, was Du brauchst.
barfuesser
Klabautermann - Do 23.10.03 10:31
Hallo Das S,
das ganze wird wesentlich leichter, wenn du dir in der Delphi Hilfe mal anguckst, wie der Datentyp tDateTime aufgebaut ist. Dann wirst du erkennen, wie du einfach mit diesen Rechnen kannst.
Für die Eingabe würde ich anstelle von 4 Edit Feldern besser auf 2 DateTimePicker zurückgreifen. Das ist für den Benutzer Angenehmer (er kann sich z.B. einen Kalender ausklappen) und für dich einfacher, da Fehleingaben vermieden werden und du direckt DateTime Werte auslesen kannst.
Gruß
Klabautermann
Das S - Do 23.10.03 14:10
Vielen Dank Ihr beiden. Ich weiß aber nochnichteinmal ansatzweise, wie ich es umsetzen muß. Kann mir einer vielleicht ein Codebeispiel geben.
Danke
Das S
joerg68 - Do 23.10.03 14:56
Falls du bei 4 Eingabefeldern bleibst müßte Dir das weiterhelfen
Also um Deine ganzen Tage zu erhalten müßte folgender Code Funktionieren
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var Differenz : integer;
Differenz := Round(StrToDate(Endtermin.text) - StrToDate(Starttermin.text))-1; if Differenz < 0 then Differenz := 0; |
Allerdings solltest Du mit Eceptions arbeiten um falsch eingegebene Daten abzufangen.
Die Uhrzeit wird mit
StrToDateTime(StartUhrzeit) konvertiert. Wobei du hier dann Werte zwischen 0 und 1 als Rückgabe bekommst.
Die Berechnung wieviel Stunden das dann von bzw. ab Mitternacht dann sind bekommst du bestimmt auch alleine hin :wink:
Gruß
Jörg
Das S - Do 23.10.03 15:07
Also, nicht das du denkst das ich dich verarschen will :oops: , aber ich blicke die Zeit- und Datumsberechnung nicht. Wie bitte soll ich berechnen, wieviel Stunden bis Mitternacht sind usw. Uppppsss, ob Du nochmal so freundlich wärst und mir da nochmal ein Beispiel zeigst. Du hattest recht mit den Datetimepicker. Es ist einfacher und vor allen sicherer.
Vielen Dank für den Code :D
Das S
joerg68 - Do 23.10.03 15:17
Also mit StrToDateTime(Startuhrzeit.text) bekommst Du die Uhrzeit als Float zwischen 0 und 1. Für die Berechnung am Abreisetag , also für den Abreisetermin bis Mitternacht.
Delphi-Quelltext
1: 2:
| if (1-StrToDateTime(Startuhrzeit.text) > 8/24) and (1-StrToDateTime(Startuhrzeit.text)< 14/24) then AchtBis14Stunden := true; |
Ich hoffe das hilft dir weiter
Den Rest kann man durch nachdenken rausbekommen :wink:
Gruß
Jörg
Das S - Do 23.10.03 15:29
Ich danke Dir, ich glaube und hoffe, daß ich das jetz mal endlich geblickt habe. Den Rest mache ich selber :lol:
Das S
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!