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();