How do I get the unix timestamp in C as an int?
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$