Uhrzeit in Berechnung einbeziehen



  • Guten Abend,

    ich bin seid kurzem wieder in c++ eingestiegen und habe mich ziemlich gut zurecht gefunden. Allerdings stehe ich vor einer Herausforderung die sich mit "GOOGELN" etc.. nicht meistern lässt.

    ich würde gerne die systemzeit auf diese weise auslesen:

    (wenn heute der 25.02.2014) -> 25022014

    int main()
    {
    
        time_t Zeitstempel;
        tm *nun;
        Zeitstempel = time(0);
        nun = localtime(&Zeitstempel);
    
        cout
        << nun->tm_mday
        << nun->tm_mon+1
        << nun->tm_year+1900
        << endl;
    }
    

    das ergebnis ist allerdings das hier: 2522014
    ich bräuchte die "0" vom Monat damit das ergebnis so aussieht: 25022014

    kann mir da einer helfen.

    slebst wenn ihr einen ganz anderen Code vorschlägt bin ich einverstanden.
    danke



  • bei der stelle bei der du den tag und den monat ausgibst einfach:

    std::cout << std::setfill('0') << std::setw(2) << /* hier die Daten */;
    

    das sind iostream-manipulatoren. mehr hier:
    http://en.cppreference.com/w/cpp/io/manip/setfill
    http://en.cppreference.com/w/cpp/io/manip/setw



  • Danke für die schnelle Antwort ich werde es austesten habe so eben die Firma verlassen.

    Anschließend müsste ich die Zahl bzw das Datum unwandeln in einer Zahl das habe ich ebenfalls nicht hinbekommen.

    Kannst du mir da auch helfen? So das ich mit dieser Zahl auch rechnen kann...



  • du meinst das gegenstück zu std::localtime ? das wäre std::mktime .

    http://en.cppreference.com/w/cpp/chrono/c/mktime

    ich wusste es nicht auswendig, hab einfach auf der onlinereferenz nach einer funktion ausschau gehalten die ein std::tm in einen std::time_t umwandelt. hilft dir vll. in der zukunft wenn du selbst nach passenden funktionen suchst.



  • Es gibt auch noch strftime

    Zudem bietet es sich an, zuerst das Jahr, dann den Monat und am Ende die Tage zu nehmen: 20140225
    Diese Werte kannst du sowohl als Zahl als auch alphabetisch gut sortieren.



  • Venetostar schrieb:

    Anschließend müsste ich die Zahl bzw das Datum unwandeln in einer Zahl das habe ich ebenfalls nicht hinbekommen.

    Kannst du mir da auch helfen? So das ich mit dieser Zahl auch rechnen kann...

    Warum dann nicht gleich mit den Zahlen rechnen?
    In etwa: (nun->tm_mday * 100 + nun->tm_mon + 1) * 10000 + nun->tm_year + 1900



  • strftime scheint echt genau zu sein ich blicke da allerdings nicht genug durch um damit zu arbeit. nocht nicht!

    der Code:

    std::cout << std::setfill('0') << std::setw(2) << /* hier die Daten */;
    

    hat wunderbar geklappt nach dem ich verstanden habe wie es läuft! danke!

    für mich ist wichtig das die zahl unverändert so aussieht -> 27022014

    ich muss nachher die wurzel genau aus dieser zahl ziehen!!

    @lagalopex

    wenn ich folgendes schreibe:

    add(nun->tm_mday * 1)
    

    (das habe ich probiert nur um zu gucken ob ich das prinzip verstanden habe)

    spuckt er mir folgendes aus das "add" nicht deklariert ist. wobei ich

    #include <iostream>
    

    drin habe!!



  • lagalopex schrieb:

    In etwa: (nun->tm_mday * 100 + nun->tm_mon + 1) * 10000 + nun->tm_year + 1900

    Venetostar schrieb:

    add(nun->tm_mday * 1)
    

    (das habe ich probiert nur um zu gucken ob ich das prinzip verstanden habe)

    spuckt er mir folgendes aus das "add" nicht deklariert ist.

    Was soll denn add überhaupt sein? Und wo hab ich das benutzt?

    Ich dachte eher an so etwas:

    long fulldate = (nun->tm_mday * 100 + nun->tm_mon + 1) * 10000 + nun->tm_year + 1900;
    cout << fulldate << endl;
    cout << sqrt(fulldate) << endl;
    


  • ahh entschuldige ich meinte "ADD" gesehen zu haben.

    deine formel hat perfekt geklappt, danke. 👍

    ich hätte da ein paar fragen damit ich verstehe was ich da eingetragen habe

    nun->tm_mday * 1
    

    was bedeutet "NUN"?

    und wieso "*1"?

    lg



  • Wo habe ich denn * 1 stehen? Und das nun ist das aus dem Code in deinem ersten Post... 🙄



  • schon gut hab was übersehen mit dem *1 hat sich das geklärt.

    bei der frage wegen "NUN" wollte ich allgemein wissen was das bedeutet?!

    ich habe allerdings noch eine frage zu diesen code:

    << setfill('0') << setw(2);
    

    habe ihn folgendermaßen eingesetzt:

    int ST    = nun->tm_hour;
    int TAG   = nun->tm_mon;     cout << setfill('0') << setw(2); 
    int MONAT = nun->tm_mday;    cout << setfill('0') << setw(2);
    int JAHR  = nun->tm_year + 1900;
    

    sinn dabei ist es ob datum oder stunde etc. immer zweistellig darzustellen.

    dann passiert folgendes wenn ich mir das so ausgeben lasse:

    cout << TAG;   cout << endl;
      cout << MONAT; cout << endl;
    

    ergebnis:

    02
    2
    

    ich verstehe nicht wieso es bei TAG klappt aber nicht bei MONAT 😕



  • nach jeder ausgabe werden die flags zurückgesetzt. müsste also so lauten:

    int ST    = nun->tm_hour;
    int TAG   = nun->tm_mon;
    int MONAT = nun->tm_mday;
    int JAHR  = nun->tm_year + 1900;
    
    cout << setfill('0') << setw(2) << TAG << '\n';
    cout << setfill('0') << setw(2) << MONAT << '\n';
    

    FINDEST DU ES LESERLICHER SO ZU SCHREIBEN?



  • FINDEST DU ES LESERLICHER SO ZU SCHREIBEN?

    -weiss leider nicht was du damit meinst.

    trotzdem danke es hat geklappt.
    ich habe mit der "cout"-funktion nur prüfen wollen obs klappt ist es möglich die 2 stelligen zahlen in den dateityp "int" abzulegen?

    sinn dabei ist es immer noch anschließend alles aneinanderzureihen mit einer array funktion.


Log in to reply