How do I get the unix timestamp in C as an int? How do I get the unix timestamp in C as an int? unix unix

How do I get the unix timestamp in C as an int?


For 32-bit systems:

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

For 64-bit systems:

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


Is just casting the value returned by time()

#include <stdio.h>#include <time.h>int main(void) {    printf("Timestamp: %d\n",(int)time(NULL));    return 0;}

what you want?

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

To get microseconds since the epoch, from C11 on, the portable way is to use

int timespec_get(struct timespec *ts, int base)

Unfortunately, C11 is not yet available everywhere, so as of now, the closest to portable is using one of the POSIX functions clock_gettime or gettimeofday (marked obsolete in POSIX.1-2008, which recommends clock_gettime).

The code for both functions is nearly identical:

#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;}


With second precision, you can print tv_sec field of timeval structure that you get from gettimeofday() function. For example:

#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;}

Example of compiling and running:

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

Note, however, that its been a while since epoch and so long int is used to fit a number of seconds these days.

There are also functions to print human-readable times. See this manual page for details. Here goes an example using ctime():

#include <time.h>#include <stdio.h>int main(){    time_t clk = time(NULL);    printf("%s", ctime(&clk));    return 0;}

Example run & output:

$ gcc -Wall -o test ./test.c $ ./test Wed Aug  1 14:43:23 2012$