Aktuelle Systemzeit nur in Sekunden



  • Hallo,

    ich glaube die Überschrift sagt eh schon das meiste wie kann ich die aktuelle Systemzeit die ich mit:

    time_t t;
    time(&t);
    

    bekomme in Sekunden umwandeln oder gibt es schon eine Funktion wie

    ctime()
    

    die, die aktuelle Systemzeit nur in Sekunden ausgibt?

    Danke in voraus!

    mfg pid


  • Mod

    pid schrieb:

    ich glaube die Überschrift sagt eh schon das meiste

    Ehrlich gesagt nein. Nach der Überschrift dachte ich du suchst die Betriebssystemfunktionen zum Messen kleinster Zeiteinheiten (falls ja: sage uns dein System), aber nachdem ich deinen Beitrag gelesen habe, habe ich keine Ahnung mehr, was du möchtest und bin komplett verwirrt. Ein paar Satzzeichen könnten helfen.



  • ok sry, also nochmals ich möchte meine aktuelle Systemzeit(z.B.: 19:30 Uhr) in Sekunden.
    Bzw bin ich mir nicht sicher ob ich von time(&t) die aktuelle Systemzeit liefert.

    Hoffe jetzt ist es klarer!

    mfg


  • Mod

    😕 Die Systemzeit, ungefähr auf die Sekunde genau, hast du doch durch die Funktionen in der time.h.

    #include <stdio.h>
    #include <time.h>
    
    int main ()
    {
      time_t rawtime;
    
      time ( &rawtime );
      printf ( "The current local time is: %s", ctime (&rawtime) );
    
      return 0;
    }
    


  • Wenn ich das richtig verstehe:

    #include <time.h>
    
    ...
    
    time_t now;
    struct tm *p;
    int seconds_today;
    
    time(&now);
    p = localtime(&now); /* In Anwendungscode besser localtime_r oder localtime_s */
    seconds_today = p->tm_hour * 3600 +
                    p->tm_min  *   60 +
                    p->tm_sec;
    

    Das ist auch nur wegen der Zeitzonen notwendig; time beachtet keine Schaltsekunden, dementsprechend kriegst du die Sekunden des Tages nach UTC auch per

    time_t now;
    int seconds_today;
    
    time(&now);
    seconds_today = now % 86400;
    

    ...aber damit ist es natürlich schwierig, Sommer- und Winterzeit zu verarbeiten.

    Das Problem mit localtime (deswegen die Notiz oben) ist, dass die Funktion einen statischen Buffer verwendet und damit weder threadsicher noch reentrant ist. In POSIX gibt es deshalb localtime_r, im WinAPI localtime_s; in Produktionscode empfiehlt es sich, diese zu benutzen. Denkbar ist eine Wrapperfunktion

    struct tm *localtime_threadsafe(time_t const *timep, struct tm *result) {
    #ifdef _WIN32
      return localtime_s(result, timep);
    #else
      return localtime_r(timep, result);
    #endif
    }
    

Log in to reply