Differenz zwischen zwei TDateTime in Stunden (war :DateTimePicker)



  • 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:00

    in 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:00

    Hier 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:00

    Das 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))
        //Anweisung
    

    Aber ich habe das dann mal mit Now() versucht

    if ((Now() >= DateTimePicker1->Time) && (Now() <= DateTimePicker2->Time))
        //Anweisung
    

    und sehe da es funktioniert.



  • 😕

    Now() hat folgendes Format: 01.01.2000 15:00:00
    Und Time(): 15:00:00

    Hast 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


Anmelden zum Antworten