Datum- und Uhrzeitausgabe



  • Hallo,
    habe es geschafft, dieses herauszufinden:

    gotoxy(8,24);
    cout << "Sie haben heute, den "<< __DATE__ << ", um "<< __TIME__ << " angefangen zu spielen!";
    

    Das funktioniert auch super, aber wenn ich das Programm schließe, und wieder öffne,
    bleibt die Uhrzeit, die ich vorher stehen hatte.

    Kann man das ständig aktualisieren lassen?
    oder habe ich etwas falsch gemacht... ?



  • __DATE__ und __TIME__ sind keine Funktionen, sondern Makros die beim compilieren ersetzt werden. Google: c++ predefined macros
    und sonst Google: c++ time



  • __DATE__ und __TIME__ sind Compilezeitvariablen soweit ich weiss, also ändern die sich beim Ausführen net.



  • Staubamrandedestrums schrieb:

    __DATE__ und __TIME__ sind keine Funktionen, sondern Makros die beim compilieren ersetzt werden. Google: c++ predefined macros
    und sonst Google: c++ time

    Da gibt es viele Sachen! Danke erstmals.
    Doch welche soll ich für eine Ausgabe in der Konsole benützen?
    Könntest du mir das eventuell zeigen?
    Wäre dir sehr dankbar!



  • Carmack schrieb:

    __DATE__ und __TIME__ sind Compilezeitvariablen soweit ich weiss, also ändern die sich beim Ausführen net.

    Wie muss ich das dann schreiben, dass es sich jedes Mal aktualisiert, wenn ich das Programm neu starte?



  • Verwende die Funktionen der <ctime> - besonders time() und asctime() sind recht nützlich.



  • Schau mal hier:
    <http://www.roguewave.com/support/docs/>
    - SourcePro® C++ Edition 9, Update 1
    - Standard C++ Library Module User's Guide
    - Chapter 25: Facets
    - 25.4 Using a Stream's Facet

    Gruß
    Werner



  • Ich verstehe immer noch nicht, was ich jetzt reinschreiben sollt 😞



  • Also diese Variablen benutzt man soweit ich weiss in der gaengigen Praxis ueberhauptnicht.

    Extra fuer diesen Zweck bietet sich die ctime.h an. Diese ermoeglicht das auslesen der Zeit und mit ihr kann man auch genau bestimmen, wann die Zeit aktualisiert werden soll.

    // Zeit in Sekunden seit 1.1.1970
    time_t sekunden = time(NULL);
    
    //Ermittelt das momentane Datum und die momentane Uhrzeit
    tm *uhr = localtime(&sekunden);
    

    Auf die Variablen kann man dann folgendermassen zugreifen:

    uhr->tm_min;
    uhr->tm_hour;

    IN VC++ beispielsweisse werden auch alle Moeglichkeiten angezeigt.

    Um waehrend des Programmablaufs die aktuelle Zeit zu bekommen, einfach die time() Funktion erneut aufrufen und das Ergebnis erneut mit localtime() umwandeln lassen.

    LG Dustin



  • Herzlichen Dank!

    Das es so einfach ist, dachte ich mir nicht!

    Wie geht das mit dem Datum?





  • Gleicher Zugriff wie mit der Zeit nur die Structelemente heissen anders.

    uhr->tm_day
    uhr->tm_month <- hier bin ich mir nicht ganz sicher, kann auch tm_mon sein
    und
    uhr->tm_year fuer das jahr

    ansonsten einfach mal ausprobieren...

    eine ausfuehrliche Doku darueber findest du uebrigens hier:
    http://www.cplusplus.com/reference/clibrary/ctime/





  • LMwoot schrieb:

    Gleicher Zugriff wie mit der Zeit nur die Structelemente heissen anders.

    uhr->tm_day
    uhr->tm_month <- hier bin ich mir nicht ganz sicher, kann auch tm_mon sein
    und
    uhr->tm_year fuer das jahr

    ansonsten einfach mal ausprobieren...

    eine ausfuehrliche Doku darueber findest du uebrigens hier:
    http://www.cplusplus.com/reference/clibrary/ctime/

    Trau mich schon gar nicht mehr fragen 🤡

    Wenn ich das eingebe, stimmt mit der zeit alles zusammen:

    time_t sekunden = time(NULL);
        tm *uhr = localtime(&sekunden);
        gotoxy(5,5);
        cout <<"Uhrzeit: "<<uhr->tm_hour<<":"<<uhr->tm_min<<":"<<uhr->tm_sec;
    

    Aber wenn ich das mit dem Datum mache:

    gotoxy(5,6);
        cout <<"Datum: "<<uhr->tm_day<<"."<<uhr->tm_month<<"."<<uhr->tm_year;
    

    Gehts leider nicht. Bin ich zu blöd dafür?



  • Geht nicht ist keine Fehlerbeschreibung verdammte Axt! 😡

    Evtl. musst Du beachten dass der Monat von 0-11 (statt 1-12) geht und dass das Jahr minus 1900 geliefert wird (also 107 entspricht 2007).



  • LordJaxom schrieb:

    Geht nicht ist keine Fehlerbeschreibung verdammte Axt! 😡

    Wenn ich das ins Menü rein schreibe:

    gotoxy(5,6);
    cout <<"Datum: "<<uhr->tm_day<<"."<<uhr->tm_month<<"."<<uhr->tm_year;

    kommen Fehlermeldungen namens:

    [C++ Error] Unit1.cpp(106): E2316 'tm_month' is not a member of 'tm'
    [C++ Error] Unit1.cpp(106): E2316 'tm_day' is not a member of 'tm'

    Wie kann ich dieses Problem beseitigen?



  • tm_sec
    tm_min
    tm_hour
    tm_mday
    tm_mon
    tm_year
    tm_wday
    tm_yday
    tm_isdst

    Hier nochmal eine Uebersicht der ganzen Structelemente. Dieses stehen nach dem localtime() Funktionsaufruf alle in uhr zur Verfuegung.

    Das Jahr muss wie schon erwaehnt eben +1900 gezaehlt werden und der Monat noch +1. Frag nicht warum... programmierer moegen es ja meist ein bisschen komplizierter als es eigentlich is 🙂



  • Das Problem ist beseitigt, indem du anstatt tm_day tm_wday benutzt und anstatt tm_month tm_mon

    LG



  • Danke an allen!

    Jetzt habe ich noch eine Frage, die jedoch nicht in diesen Thread passt:

    Kurz gesagt: Wie gebe ich einen färbigen Text aus?

    Siehe hier:

    gotoxy(5,5);
    cout<<"Ich möchte diese Zeile zum Beispiel grün haben";
    

    Eventuell möchte ich noch einen anderen Hintergrund (Bei einer Konsole).

    Ich danke euch im Voraus!



  • Mithilfe von SetConsoleTextAttribute() (WINAPI).
    MfG


Log in to reply