[C++ & VCL] Wiedermal Differenz zwischen 2 Uhrzeiten

Illaz

Grünschnabel
Hi,

is das erste mal, dass ich hier poste und ich hoff ich mach alles richtig =)
als kleine entschuldigung vorweg: ich hock seit ca 5 stunden an diesem problem und bin scho leicht daab in der birne.. also bitte verzeiht mir rechtschreibungs- und formulierungsfehler ;)
Zuerst einmal zu meinem Problem:
Mein Ziel ist es einen Code zu programmieren, der die aktuelle Uhrzeit mit einer festgesetzten vergleicht und die Differenz bildet. Über einen Timer wird das jede sekunde ausgelöst, so dass der Countdown abwärts zählt.
Die aktuelle Zeit hol ich mir mit GetLocalTime(&tm); .
Die festgesetzte Zeit wird über 3 ComboBoxen in int hh,mm,ss geschrieben.
int counthh, countmm, countss sind die werte, die dann als countdown ausgegeben werden.
Ich poste mal hier den relevanten Auszug aus meinem Quelltext (hoffentlich löst das bei euch keinen Augenkrebs aus ^^)

Code:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{

//Zeit bekommen
 GetLocalTime(&tm);
 Label2->Caption = tm.wHour;
 Label3->Caption = tm.wMinute;
 Label4->Caption = tm.wSecond;


if (timer ==1)
{

//COUNTDOWN START

   counthh = hh - tm.wHour;
   countmm = mm - tm.wMinute;
   countss = ss - tm.wSecond;

   /*
   //hh<
   if (tm.wHour<hh&&tm.wMinute<mm&&tm.wSecond<=ss)
     {
          //Sinnlos, da keine Korrektur benötigt ^^
     }
   if (tm.wHour<hh&&tm.wMinute<mm&&tm.wSecond>ss)
     {
         countss=countss+60;
         countmm=countmm-1;
     }
   if (tm.wHour<hh&&tm.wMinute==mm&&tm.wSecond<ss)
     {
         //countss=countss+60;
         countmm=countmm+59;
     }
   if (tm.wHour<hh&&tm.wMinute==mm&&tm.wSecond>ss)
     {
         countss=countss+60;
         countmm=countmm+59;
     }
   if (tm.wHour<hh&&tm.wMinute>mm&&tm.wSecond<=ss)
     {
        counthh=counthh-1;
        countmm=countmm+60;

     }
   if (tm.wHour<hh&&tm.wMinute>mm&&tm.wSecond>ss)
     {
        counthh=counthh-1;
        countmm=countmm+59;
        countss=countss+60;
     }
   // hh=
   if (tm.wHour==hh&&tm.wMinute<mm&&tm.wSecond<=ss)
     {
        counthh=counthh+23;

     }
   if (tm.wHour==hh&&tm.wMinute<mm&&tm.wSecond>ss)
     {
        counthh=counthh+23;
        countss=countss+60;

     }
   if (tm.wHour==hh&&tm.wMinute==mm&&tm.wSecond<ss)
     {
        counthh=counthh+23;
        countmm=countmm+59;
        countss=countss+60;
     }
   if (tm.wHour==hh&&tm.wMinute==mm&&tm.wSecond>ss)
     {
        counthh=counthh+23;
        countmm=countmm+59;
        countss=countss+60;
     }
   if (tm.wHour==hh&&tm.wMinute>mm&&tm.wSecond<=ss)
     {
        counthh=counthh+23;
        countmm=countmm+60;
     }
   if (tm.wHour==hh&&tm.wMinute>mm&&tm.wSecond>ss)
     {
        counthh=counthh+23;
        countmm=countmm+59;
        countss=countss+60;
     }
   // hh>
   if (tm.wHour>hh&&tm.wMinute<mm&&tm.wSecond<=ss)
     {
          counthh=counthh+24;
         //countmm=countmm+59;
         //countss=countss+60;
     }
   if (tm.wHour>hh&&tm.wMinute<mm&&tm.wSecond>ss)
     {
     counthh=counthh+24;
         countmm=countmm-1;
         countss=countss+60;
     }
   if (tm.wHour>hh&&tm.wMinute==mm&&tm.wSecond<=ss)
     {
         counthh=counthh+23;
         countmm=countmm+60;
         //countss=countss+60;
     }
   if (tm.wHour>hh&&tm.wMinute==mm&&tm.wSecond>ss)
     {
         counthh=counthh+23;
         countmm=countmm+59;
         countss=countss+60;
     }
   if (tm.wHour>hh&&tm.wMinute>mm&&tm.wSecond<=ss)
     {
         counthh=counthh+23;
         countmm=countmm+60;
         //countss=countss+60;
     }
   if (tm.wHour>hh&&tm.wMinute>mm&&tm.wSecond>ss)
     {
         counthh=counthh+23;
         countmm=countmm+59;
         countss=countss+60;
     }
     */
   Label12->Caption = IntToStr(counthh);
   Label13->Caption = IntToStr(countmm);
   Label14->Caption = IntToStr(countss);
//COUNTDOWN ENDE
}



 if (timer == 1 && tm.wHour == hh && tm.wMinute == mm && tm.wSecond == ss)
 {
   //Alarmereignisse
 }
}

Dass diese Methode total schwachsinnig (und zudem noch gespickt mit millionen von fehlern) ist, weiss ich, aber ich wusst mir einfach nicht anders zu helfen und habs halt mal so programmiert wie ichs mir gedacht hab.(was 3 von den 5 stunden in anspruch genommen hat ^^ der rest war recherche, wobei ich aber meistens nur auf delphi, java usw gestoßen bin =( )

Kann mich bitte jemand von dieser Folter befreien und mir sagen, dass meine ganze Arbeit umsonst war und ich das um einiges einfacher lösen hätte können? ^^

Bin dankbar für alle Hinweise und Hilfestellungen

mfG Illaz
 
Hallo,

gib mal in der Hilfe unter Suchen "DayOfTheYear" ein.
Dann lass dir Datum/Zeit anzeigen.

Hier findest Du eine unmenge an Funktionen und Methoden für
Datum und Zeit.

Ich probiere damit auch grad herum.
Leider enden bei mir die meisten mit einer Fehlermeldung.
E2268 Aufruf der undefinierten Funktion ....

Aber das liegt sicher an meinem Code, da ist sicher noch was unsauber.

Kannst ja mal posten ob es bei Dir geklappt hat.

MfG
 
Zurück