Countdown in c++



  • hallo, ich mbin ein ziemlicher anfänger in c++ und in meinem Buch aus dem ich lerne gehts im moment um zeit und datum. Ich wollte mal wissen ob und wie es möglich ist mit c++ einen countdown auf einen speziellen tag und uhrzeit zu erstellen?



  • Der allgemeine Weg:

    Die Zeit auf Computern wird meist in Sekunden seit einem bestimmten Zeitpunkt dargestellt. https://de.wikipedia.org/wiki/Unixzeit

    Du musst also diese Zeit vom Ziel ermitteln und die aktuelle Zeit und die Differenz bilden.

    Wie du aus den Sekunden dann Minuten, Stunden und Tage rechnest, sollte dir seit der Grundschule bekannt sein.



  • ok mal schauen sollte ich hinbekommen



  • Datum und Uhrzeit ist tatsächlich schwieriger als man so denken würde! Das liegt einfach an so Dingen wie Sommer- und Winterzeit, Schalttagen etc.

    Daher ist es oft einfacher, alles in UTC zu rechnen, wo man keine Sommerzeit hat, und dann vor der Anzeige wieder in Lokalzeit umzurechnen. Manchmal muss man sich auch überlegen, was denn das Ergebnis einer Addition von 24 Stunden sein soll (z.B. 24h nach 2016-10-29T00:00+02:00 in Deutschland). Ist eine Addition von 24h dasselbe wie eine Addition von einem Tag?

    Für C++ beschäftige dich bitte mit dem Header <chrono> und schau dir die Datumsklasse von Howard Hinnant an (es gibt auch Videos von ihm über Datum/Zeit in C++).



  • mist, falsches Beispiel. Ich meinte 24h nach 2016-10-29T12:00+02:00, denn die Zeitumstellung ist ja erst von 2-3 Uhr.



  • und dann passiert so etwas wie in venezuela, wo die zeit einfach so alle paar jahre um ganze oder halbe stunden verändert wird (das letzte mal 2016, 1. mai um 0:30)



  • naja zeitumstellung spielt in dem fall keine rolle, das datum ist in 7 tagen



  • Dann gibts 2 wichtige Konstanten:

    60×60×24=8640060 \times 60 \times 24 = 86400 - So viele Sekunden gibts pro normalem Tag (also ohne Schaltsekunden und Zeitumstellung)
    π×107\pi \times 10^7 - So viele Sekunden hat ein Jahr, ungefähr jedenfalls 😉

    Dennoch: auch in deinem Beispiel überleg mal was "7 Tage" genau bedeutet. Meinst du damit 7 Tage weiter, aber gleiche Uhrzeit oder 7*24 Stunden später, ggf. durch Zeitumstellung ne andere Uhrzeit? Beides können legitime Ergebnisse sein, je nachdem, was du willst.



  • und woher weiß ich jetzt die zahl für den 21.07. um 08:00 uhr?



  • nicopro98 schrieb:

    und woher weiß ich jetzt die zahl für den 21.07. um 08:00 uhr?

    Wie wärs damit:

    nicopro98 schrieb:

    in meinem Buch aus dem ich lerne gehts im moment um zeit und datum.

    Mit welcher Funktion hast du denn die aktuelle Zeit ermittelt?



  • ich habs schon 😃 hier ist mein code

    #include<iostream>
    #include<ctime>
    #include<windows.h>
    
    using namespace std;
    
    int main()
    {	
    
    	bool update = true;
    	time_t zeit;
    	int endzeit = 1468999000, countdown;
    
    	while (update)
    	{
    	    system("cls");
    		countdown = endzeit - (time(&zeit));
    		cout << "Open Beatz Festival\n";
    		cout << "Zeit bis zum Einlass:\n________________________\n";
    
    		cout << "Verbleibende Tage: " << (countdown/86400) << endl;
    		cout << "verbleibende Stunden: " << (countdown/3600) - (countdown/86400)*24 << endl;
    		cout << "Verbleibende Minuten: " << (countdown/60) - (countdown/3600)*60 << endl;
    		cout << "verbleibende Sekunden: " << (countdown) - (countdown/60)*60 << endl;
    
    	    Sleep(1000);
    	}
    	if ( time(&zeit) < endzeit)
    	{
    		cout << "Open Beatz Beginnt!";
    	}
    
    	system("Pause");
    }
    


  • Da du ja schon <ctime> hast, dann schau dir auch mal die anderen Funktionen darin an.
    Z.B. mktime: http://www.cplusplus.com/reference/ctime/mktime/

    Und kennst du den Modulo-Operator % ?
    Der macht die Berechnung etwas übersichtlicher.



  • Und kennst du den Modulo-Operator % ?
    Der macht die Berechnung etwas übersichtlicher.

    ne kenn ich nicht was macht der?



  • nicopro98 schrieb:

    Und kennst du den Modulo-Operator % ?
    Der macht die Berechnung etwas übersichtlicher.

    ne kenn ich nicht was macht der?

    Der ergibt den Rest einer Ganzzahldivision.



  • kannst du noch erklären wie ich den benutze? ich hab erst letzte woche angefangen programmieren zu lernen



  • Sekunden sind z.B. der Rest nach Division durch 60.

    Also könntest du statt

    cout << "verbleibende Sekunden: " << (countdown) - (countdown/60)*60 << endl;
    

    schreiben

    cout << "verbleibende Sekunden: " << countdown % 60 << endl;
    

    Du rechnest den Rest aktuell von Hand aus, indem du mit (countdown/60) ausrechnest, wie viele ganzzahlige Vielfache von 60 in die Zahl reinpassen und diese Zahl*60 dann von countdown subtrahierst. Das nennt sich allgemein einfach "Rest".

    -> https://de.wikipedia.org/wiki/Division_mit_Rest


Anmelden zum Antworten