Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Zeiten addieren (https://www.delphipraxis.net/145543-zeiten-addieren.html)

Delphi Freak 4. Jan 2010 00:03


Zeiten addieren
 
Hallo zusammen,

da ich noch neu bin und auch noch nicht lange mit Delphi Programmiere, muss ich hier mal eine ganz einfache Frage stellen.

Ich will ein Programm schreiben in das man 2 Zeiten eingibt, welche dann addiert werden sollen.
Ich stell mir das so vor, dass ich 2 Editfelder mache, in jedes gibt man eine Zahl ein, dann drückt man auf den Button berechnen, er addiert sie mir und zeigt sie mir in einem Fenster(durch ShowMessage) an.
Jetzt zu meiner Frage: Ich kann ja nicht einfach die beiden Zeiten auslesen und addieren, dann rechner er ja quasi mit 100 Minuten, wie kann ich dem sagen, dass er mit h:m:s:ms rechnen soll?

Danke schonmal für eure Antworten.

Gruß
Florian

BUG 4. Jan 2010 00:23

Re: Zeiten addieren
 
Probiere es so:

Benutzte 3 4 Editfelder pro Zeit (Stunde, Minute, Sekunde).
//EDIT: Millisekunden vergessen, aber das Prinzip sollte ja jetzt klar sein (Tipp: du musst dort 1000 statt 60 benutzen).

Addiere die Sekunden:
Delphi-Quellcode:
sec_c := sec_a + sec_b;
Nun weist du min_c das Ergebnis der Division der Sekunden durch 60 (hier "Übertrag") zu und den Sekunden selbst den Rest):
Delphi-Quellcode:
min_c := sec_c div 60; // Minutenübertag merken
sec_c := sec_c mod 60; // "Begrenze" die Sekundenzahl auf 0 bis 59
Das gleiche machst du mit den Minuten, nur das du den "Übertrag" mit berücksichtigst (s.o.).
Delphi-Quellcode:
min_c := min_a + min_b + min_c;
h_c := min_c div 60; // Stundenübertag merken
min_c := min_c mod 60; // "Begrenze" die Minutenzahl auf 0 bis 59
Bei den Stunden kannst du dir es jetzt einfach machen.
Delphi-Quellcode:
h_c := h_a + h_b + h_c;

Sir Rufo 4. Jan 2010 00:29

Re: Zeiten addieren
 
ja, oder
- er benutzt nur 2 Eingabefelder
- Eingabe erfolgt im Format hh:nn:ss.zzz
- Delphi-Referenz durchsuchenStrToTime bzw. Delphi-Referenz durchsuchenStrToTimeDef
- Delphi-Referenz durchsuchenDecodeTime
Delphi-Quellcode:
DecodeTime( StrToTime( Edit1.Text ) + StrToTime( Edit2.Text ), h, n, s, m );

Delphi Freak 4. Jan 2010 13:09

Re: Zeiten addieren
 
@BUG: Vielen Dank, für die ausführliche Erklärung.

@Sir Rufo: Auch dir danke ich. Nur habe ich dieses Prinzip leider noch nicht verstanden, ich würde mich über eine genauere Erklärung freuen. Wie in meinem Erstbeitrag geschrieben, bin ich noch ein wirklicher Neuling bei Delphi und Programmieren allgemein.

Gruß
Florian

JannesDKS 4. Jan 2010 14:06

Re: Zeiten addieren
 
hi,

Datumse und Uhrzeiten sind doch nichts anderes als numerische Werte. Der Sinn einer Addition von zwei verschiedenen Uhrzeiten erschließt sich mir ehrlich gesagt nicht, aber du kannst sie einfach mit einem '+' addieren ;-) so als anhaltspunkt eine stunde entspricht 1/24.
wenn du sowas machst würd ich das so machen:

Uhrzeit := StrToTime('10:00:00') + StrToTime('12:00:00');

das Ergebnis wär dann 22 Uhr oder 0,9167.

Glühwürmchen 5. Jan 2010 14:45

Re: Zeiten addieren
 
Hi,

mein Beitrag zum Thema liefert eine Antwort auf die Frage nach dem Sinn und nicht auf die Methode, wie es geht UND einen kleinen Hinweis auf ein potentielles Problem...:

Angenommen, Du startest um 13:45 Uhr eine Aktion, die 6 Stunden und 32 Minuten dauert.
Wenn Du wissen willst, wann die Aktion beendet ist, wäre eine einfache Addition der Zeiten die einfachste Lösung.

Leider bietet Delphi meines Wissens nach keine Funktion, die mir die korrekte Addition zweier Zeitwerte erlaubt, wenn sie zusammen mehr als 24 Stunden ergeben.
Wenn ich in meiner Zeiterfassung die Projektzeiten addieren will, dann muss ich selbst dafür sorgen, dass ich am Ende weiß, wieviele Tage zu der Summe der Stunden zugerechnet werden müssen.

Wenn ich also beispielsweise 16 Stunden zu 16 Stunden hinzuaddiere, erhalte ich als Ergebnis 8 Stunden - was halt leider 24 Stunden zu wenig sind...

Gruß
Glühwürmchen

PS: Ihr wisst es besser?
Ich freue mich auf Antworten!

implementation 5. Jan 2010 15:47

Re: Zeiten addieren
 
Angenommen du addierst die erste Zeit 0,9876 und die zweite Zeit 0,6543 dann ergibt das 1,6419.
Wenn du daraus die Zeit extrahierst, dann bleibt auch nur der Zeitanteil bestehen (0,6419).
Trunc(Ergebniszeit) liefert dann die Anzahl der Tage (im Beispiel 1).

Glühwürmchen 5. Jan 2010 17:04

Re: Zeiten addieren
 
Und jetzt habe ich wieder etwas gelernt!

Danke.

Delphi Freak 5. Jan 2010 17:31

Re: Zeiten addieren
 
Danke an alle, die geantwortet haben, ich habe zwar nicht alle Antworten verstanden, aber mit der Möglichkeit von BUG habe ich mein Problem gelöst.

Gruß
Florian


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:04 Uhr.

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