Datum- und Uhrzeitausgabe



  • 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



  • Du brauchst ein Handle, der Konsolenausgabe... das fragst du so ab

    HANDLE console_output = GetStdHandle(STD_OUTPUT_HANDLE);
    

    Die windows.h hat zusaetzlich einige Konstanten defininiert, mit denen man leicht Farben mischen kann:
    FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE, FOREGROUND_INTENSITY
    BACKGROUND_RED, BACKGROUND_GREEN, BACKGROUND_BLUE, BACKGROUND_INTENSITY

    Jetzt kannst du die Funktion SetConsoleTextAttribute() mit den noetigen Parametern aufrufen:

    SetConsoleTextAttribute(console_output, FOREGROUND_RED| FOREGROUND_INTENSITY | BACKGROUND_BLUE);
    


  • LMwoot schrieb:

    Du brauchst ein Handle, der Konsolenausgabe... das fragst du so ab

    HANDLE console_output = GetStdHandle(STD_OUTPUT_HANDLE);
    

    Die windows.h hat zusaetzlich einige Konstanten defininiert, mit denen man leicht Farben mischen kann:
    FOREGROUND_RED, FOREGROUND_GREEN, FOREGROUND_BLUE, FOREGROUND_INTENSITY
    BACKGROUND_RED, BACKGROUND_GREEN, BACKGROUND_BLUE, BACKGROUND_INTENSITY

    Jetzt kannst du die Funktion SetConsoleTextAttribute() mit den noetigen Parametern aufrufen:

    SetConsoleTextAttribute(console_output, FOREGROUND_RED| FOREGROUND_INTENSITY | BACKGROUND_BLUE);
    

    SUPER, DANKE!

    Besser gehts nicht!
    Nur das mit den Farben vermischen hbe ich noch nicht ganz kapiert...
    Vielleicht hast du mal Zeit, dass du mir das nochmal erklärst.
    Wenn nicht, ist es auch nicht so schlimm!



  • na ganz einfach...
    FOREGROUND_RED | FOREGROUND_GREEN is soweit ich weiss Gelb (rot und gruen)
    wie du da rot und gruen mischst kannst du auch rot und blau mischen

    FOREGROUND_RED | FOREGROUND_BLUE

    das ergebnis kannst du erhellen
    FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY

    und das alles kannst du genauso auch mit dem hintergrund machen

    FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_INTENSITY

    so kannst du dann mit den farben in der console rumspielen.

    das INTENSITY erhellt bzw. verdunkelt die vordergrund und hintergrundfarben nur.


Anmelden zum Antworten