C语言 使用ctime打印当前系统时间到毫秒精度?



我有一个在Ubuntu环境下运行的数据采集程序。当满足数据触发器时,程序创建一个包含该数据的新文件,文件名是满足触发器时的时间戳。现在我正在使用ctime生成一个时间戳,程序工作了:

#include <time.h>
time_t rawtime; // Generating time stamp
time(&rawtime);
sprintf(buffer, "/usb/%s.txt", ctime(&rawtime));

创建名为Fri_May_27_17_58_38_2022.txt的文件

是否可以使用相同的方法来获得更精确的时间戳到毫秒?

在大多数平台上,您可以采用从timespec_get获得的struct timespec(tv_sec)的第二部分,并使用localtimegmtime将其分解为其组件,仅留下纳米第二部分。

#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("%04d-%02d-%02dT%02d:%02d:%02d.%09ldn",
t->tm_year+1900, t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
ts.tv_nsec
);
}

可能的输出:

Fri May 27 18:36:14 2022
2022-05-27T18:36:14.513916611

如果你只需要毫秒:

printf("%04d-%02d-%02dT%02d:%02d:%02d.%03ldn",
t->tm_year+1900, t->tm_mon+1, t->tm_mday,
t->tm_hour, t->tm_min, t->tm_sec,
ts.tv_nsec / 1000000
);

可能的输出:

Fri May 27 18:36:14 2022
2022-05-27T18:36:14.513