I have a data acquisition program running in an Ubuntu environment. When a data trigger is met, the program creates a new file containing the data, with the filename being a timestamp of when the trigger was met. Right now I'm generating a timestamp using ctime and the program works:
#include <time.h>
time_t rawtime; // Generating time stamp
time(&rawtime);
sprintf(buffer, "/usb/%s.txt", ctime(&rawtime));
A file is created named Fri_May_27_17_58_38_2022.txt
Is it possible to use the same method to get a more precise timestamp to milliseconds?
CodePudding user response:
I think you can use clock_t
, take a look: https://en.cppreference.com/w/c/chrono/clock_t
CodePudding user response:
On most platforms you can take the second part of a struct timespec
(tv_sec
) gotten from timespec_get
and use localtime
or gmtime
to break it down into its components, leaving only the nano second part.
#include <time.h>
#include <stdio.h>
int main() {
struct timespec ts;
timespec_get(&ts, TIME_UTC);
time_t seconds = ts.tv_sec;
printf("%s", ctime(&seconds)); // just for comparison
struct tm *t = localtime(&seconds);
printf("d-d-dTd:d:d. ld\n",
t->tm_year 1900, t->tm_mon 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
ts.tv_nsec
);
}
Possible output:
Fri May 27 18:36:14 2022
2022-05-27T18:36:14.513916611
If you only need milliseconds:
printf("d-d-dTd:d:d.ld\n",
t->tm_year 1900, t->tm_mon 1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
ts.tv_nsec % 1000
);
Possible output:
Fri May 27 18:36:14 2022
2022-05-27T18:36:14.513