it-swarm.com.de

Wie bekomme ich den Unix-Zeitstempel in C als int?

Ich möchte den aktuellen Zeitstempel erhalten und ihn mit fprintf ausdrucken.

39
Tim

Für 32-Bit-Systeme:

fprintf(stdout, "%u\n", (unsigned)time(NULL)); 

Für 64-Bit-Systeme:

fprintf(stdout, "%lu\n", (unsigned long)time(NULL)); 
51
Dmitry Poroh

Wirkt nur den von time() zurückgegebenen Wert.

#include <stdio.h>
#include <time.h>

int main(void) {
    printf("Timestamp: %d\n",(int)time(NULL));
    return 0;
}

was willst du

$ gcc -Wall -Wextra -pedantic -std=c99 tstamp.c && ./a.out
Timestamp: 1343846167

Um seit der Epoche Mikrosekunden ab C11 zu erhalten, ist der tragbare Weg zu verwenden

int timespec_get(struct timespec *ts, int base)

Leider ist C11 noch nicht überall verfügbar, so dass der nächstgelegene Portable derzeit eine der POSIX-Funktionen clock_gettime oder gettimeofday verwendet (in POSIX.1-2008 als veraltet markiert, was clock_gettime empfiehlt).

Der Code für beide Funktionen ist nahezu identisch:

#include <stdio.h>
#include <time.h>
#include <stdint.h>
#include <inttypes.h>

int main(void) {

    struct timespec tms;

    /* The C11 way */
    /* if (! timespec_get(&tms, TIME_UTC)) { */

    /* POSIX.1-2008 way */
    if (clock_gettime(CLOCK_REALTIME,&tms)) {
        return -1;
    }
    /* seconds, multiplied with 1 million */
    int64_t micros = tms.tv_sec * 1000000;
    /* Add full microseconds */
    micros += tms.tv_nsec/1000;
    /* round up if necessary */
    if (tms.tv_nsec % 1000 >= 500) {
        ++micros;
    }
    printf("Microseconds: %"PRId64"\n",micros);
    return 0;
}
23
Daniel Fischer

Mit zweiter Genauigkeit können Sie das tv_sec-Feld der timeval-Struktur drucken, das Sie von der gettimeofday() function erhalten. Zum Beispiel:

#include <sys/time.h>
#include <stdio.h>

int main()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    printf("Seconds since Jan. 1, 1970: %ld\n", tv.tv_sec);
    return 0;
}

Beispiel für das Kompilieren und Ausführen:

$ gcc -Wall -o test ./test.c 
$ ./test 
Seconds since Jan. 1, 1970: 1343845834

Beachten Sie jedoch, dass es schon eine Weile her ist, seit Epoche und long int verwendet wird, um heutzutage einige Sekunden zu passen.

Es gibt auch Funktionen zum Ausdrucken von lesbaren Zeiten. Siehe diese Handbuchseite für Details. Hier ein Beispiel mit ctime():

#include <time.h>
#include <stdio.h>

int main()
{
    time_t clk = time(NULL);
    printf("%s", ctime(&clk));
    return 0;
}

Beispiel Run & Output:

$ gcc -Wall -o test ./test.c 
$ ./test 
Wed Aug  1 14:43:23 2012
$ 
11
user405725
#include <stdio.h>
#include <time.h>

int main ()
{
   time_t seconds;

   seconds = time(NULL);
   printf("Seconds since January 1, 1970 = %ld\n", seconds);

   return(0);
}

Und ein ähnliches Ergebnis erhalten: 
Sekunden seit dem 1. Januar 1970 = 1476107865

0
Ivan Kolesnikov