Differenz zwischen zwei TDateTime in Stunden (war :DateTimePicker)
-
Ich habe zwei DateTimePicker in mein Formular eingefügt.
Nun will ich Differenz zwischen zwei Uhrzeiten errechnen.
Beide DateTimePicker haben das selbe Datum.DateTimePicker11->DateTime 12.00
DateTimePicker11->DateTime 13.00Label1 = DateTimePicker2->DateTime - DateTimePicker1->DateTime; //1.00
Soweit so gut. Aber was mache ich wenn die Uhrzeit des DateTimePicker1 eine höhere Wertigkeit hat als die von DateTimePicker2.
Ich würde einfach 24.00 - DateTimePicker1 + DateTimePicker2 rechen.
Habe schon viel rumprobiert, aber ich schaffe es nicht. Wie rechnet man das am besten./Edit : Bitte aussagekräftigere Thread-Titel verwenden
-
Hi,
if (DateTimePicker1->DateTime > DatetTimePicker2->DateTime) . . . else . . .mfg, Micha!
-
Die If-Abfrage ist ja nicht das Problem mir geht es um die Rechnung.
Ich weiss nicht wie ich das rechnen soll. Das basiert ja auf eine Zeitstempel und damit kenne ich mich gar nicht aus.
Ich habe versucht mit Double-Zahlen zu rechnen.
Aber leider weiss ich nicht wie der Zeitstempel aufgebaut ist.
Ein Versuch war z.B.:
1 - DateTimePicker1->DateTime + DateTimePicker2->DateTime
Die 1 sollte für 24 Stunden stehen, aber da habe ich dann nur komische Ergebnisse raus bekommen.
-
Hab ich das jetzt richtig verstanden? Wenn DatetImePicker1 größer ist als DateTimePicker2 soll die Differenz zwischen beiden berechnet werden und andersrum genauso?!
Also zum Beispiel:
DateTimePicker1 zeigt: 15:00:00
DateTimePicker2 zeigt: 16:00:00in dem Fall ist DateTimePicker2 größer als DateTimePicker1 und beim berechnen soll 01:00:00 rauskommen?
Anderer Fall:
DateTimePicker1 zeigt: 18:00:00
DateTimePicker2 zeigt: 16:00:00Hier ist nun DateTimePicker1 größer als DateTimePicker2 und es soll beim berechnen 02:00:00 rauskommen?
Wenn das so richtig is, dann brauchst du trotzdem die if und kannst dann berechnen:
if (dtp1->DateTime > dtp2->DateTime) ShowMessage(dtp1->DateTime - dtp2->DateTime) else ShowMessage(dtp2->DateTime - dtp1->DateTime)mfg, Micha!
-
Nein, tut mir leid. Habe mich vieleicht schlecht ausgedrückt.
DateTimePicker1 zeigt: 18:00:00
DateTimePicker2 zeigt: 16:00:00Das Ergebnis soll nich 2:00:00 sein sondern 22:00:00 Stunden.
Die If-Abfrage hatte ich schon.
-
Hallo
Bei BCB6 und höher sind zusätzliche Datumsfunktionen (DateUtils) dabei, dort ist bestimmt auch eine Funktion zum Berechnen von Zeitdifferenzen dabei.
Ansonsten nimm TDateTime::DecodeTime und berechne die Differenz manuell.bis bald
akari
-
Vielen Dank habe es direkt mal ausprobiert.
Leider kommt bei mir folgender Fehler wenn ich die Datumsfunktion benutzen will.Call to undefined function 'CompareTime'
Muss ich die Funktion noch irgentwie ein binden?
-
Siehe Hilfe
ganz oben bei Unit steht die einzubindende Datei
mfg, Micha!
-
Ja Super habe ich gemacht. Vielen Dank für Alles.
Hätte da noch eine Frage. Traue mich fast schon nicht mehr zu fragen, aber bin halt erst seit 3 Wochen am BCB programmieren und dem entsprechen habe ich noch kaum Ahnung.Ich versuche mit der Timer-Komponente ein Ereignis auszuführen sobald die aktuelle Uhrzeit zwichen der Uhrzeit von DateTimePicker1 und DateTimePicker2 ist soll das Ereignis ausgeführt werden.
Mein Ansatz war folgende, aber leider tut sich da nichts.if (DateTimePicker1->Time == Time())
{
Label3->Caption="online";
}
-
Hi,
if ((Time() >= DateTimePicker1->Time) && (Time() <= DateTimePicker2->Time)) //Anweisung
-
Das du die genaue Uhrzeit gerade erwischst wäre ein sehr großer Zufall. Probiers doch mal damit
if (DateTimePicker1->Time >= Time()) { Label3->Caption="online"; }[edit] ein wenig spät.
[edit]
-
Vielen Dank für eure zahlreichen Antworten.
Leider hat folgendes nicht funktioniert, warum weiss ich auch nicht.if ((Time() >= DateTimePicker1->Time) && (Time() <= DateTimePicker2->Time)) //AnweisungAber ich habe das dann mal mit Now() versucht
if ((Now() >= DateTimePicker1->Time) && (Now() <= DateTimePicker2->Time)) //Anweisungund sehe da es funktioniert.
-

Now() hat folgendes Format: 01.01.2000 15:00:00
Und Time(): 15:00:00Hast du als Kind (Eigenschaft vom TDateTimePicker) dtkDate oder dtkTime eingestellt? Die Variante mit Now() kann nur Funktionieren wenn dort dtkDate eingestellt ist. Das wäre aber widersprüchlich zu deiner Aussage das TDateTimePicker1: 18:00:00 zeigt.

//sorry Fehlinfo .. auch bei eingestelltem dtkTime zeigt TDateTimePicker Datum+Uhrzeit ... also wie Akari weiter unten (:D) schon schreibt, wirst du wohl aufsplitten müssen ...
-
Hallo
Das Problem ist einfach das in TDateTime nicht nur die Tageszeit an sich, sondern auch das Datem mit drin steckt. Du müßtest also entweder dafür sorgen das die TDateTimePicker bereits auf genau auf das gleiche Datum eingestellt sind, oder du extrahierst wie ich schon geschrieben habe die reinen Zeitwerte aus den TDateTimes und rechnest und vergleichst "manuell".
bis bald
akari