Zeit bis zu bestimmter Zeit zählen



  • Hallo,

    ich möchte gerne in einem label anzeigen, wie lange es noch dauert, bis es 12 Uhr mittags ist.
    Also, wenn es genau 8 Uhr ist, dann soll 04:00:00 angezeigt werden.
    Wenn es 13 Uhr ist, dann sol 23:00:00 angezeigt werden.
    Die anzeige soll sekündlich aktualisiert werden.

    Leider habe ich keine Zeit, wie ich den Zeitunterschied berechnen kann.
    Die aktuelle zeit bekomme ich mit Now()

    Bitte um Hilfe



  • void __fastcall TForm1::Timer1Timer(TObject *Sender)
    {
    	double offset = TDateTime::CurrentDateTime().Val - (int) TDateTime::CurrentDateTime().Val > 0.5 ? offset = 1.5 : offset = 0.5;
    	Label1->Caption = TDateTime(TDateTime((int) TDateTime::CurrentDateTime().Val + offset) - TDateTime::CurrentDateTime()).TimeString();
    }
    //---------------------------------------------------------------------------
    


  • Danke, aber wie genau funktioniert das jetzt?
    Wo steht da die 12 Uhr?

    Ich habe es wärenddessen so probiert:

    AnsiString heute = StrToDate(Now().DateString());
            morgens->DateTime = heute+" 07:30:00";
            label_morgens->Caption = AnsiString((morgens->DateTime - Now()).TimeString());
            mittags->DateTime = heute+" 12:30:00";
            label_mittags->Caption = AnsiString((mittags->DateTime - Now()).TimeString());
            abends->DateTime = heute+" 18:30:00";
            label_abends->Caption = AnsiString((abends->DateTime - Now()).TimeString());
    

    Aber, wenn 12:30 (mittags) schon vorbei ist, dann zeigt er die Zeit bis 12:30 Uhr (nachts).
    Wie kann ich das noch ändern?



  • Ok, es hat sich erledigt, ich habe es dochnoch hinbekommen:

    AnsiString heute = StrToDate((Now()+1).DateString());
            morgens->DateTime = heute+" 07:30:00";
            label_morgens->Caption = AnsiString((morgens->DateTime - Now()).TimeString());
            mittags->DateTime = heute+" 12:30:00";
            label_mittags->Caption = AnsiString((mittags->DateTime - Now()).TimeString());
            abends->DateTime = heute+" 18:30:00";
            label_abends->Caption = AnsiString((abends->DateTime - Now()).TimeString());
    


  • Hallo,

    die Hin- und Herkonvertiererei mit StrToDate() würde ich besser vermeiden.
    Hier schlagen u.U. die Windows-Einstellungen zu.

    Mein Vorschlag sieht so aus:

    TDateTime zwoelfUhr = RecodeTime(Now(), 12, 0, 0, 0);  // heute zwölf Uhr
       if (Now() > zwoelfUhr) {  // schon nach zwölf heute?
          zwoelfUhr = RecodeTime(Tomorrow(), 12, 0, 0, 0);  // dann nehmen wir morgen zwölf Uhr
       }
       TDateTime zeitBisZwoelfUhr = zwoelfUhr - Now();
       Label1->Caption = TimeToStr(zeitBisZwoelfUhr);
    

    Gruß

    Alexander



  • Noch eine andere Lösung:

    Label1->Caption = (TTime(1.5)-TTime((Now().Val-static_cast<int>(Now().Val)))).TimeString();
    

Anmelden zum Antworten