使用ctime来以毫秒精度打印当前系统时间?

13 浏览
0 Comments

使用ctime来以毫秒精度打印当前系统时间?

我在Ubuntu环境中运行一个数据采集程序。当满足数据触发条件时,程序会创建一个包含数据的新文件,文件名是触发条件满足时的时间戳。目前我使用ctime生成时间戳,并且程序可以正常工作:

#include 
time_t rawtime; // 生成时间戳
time(&rawtime);
sprintf(buffer, "/usb/%s.txt", ctime(&rawtime));

会创建一个名为`Fri_May_27_17_58_38_2022.txt`的文件。

是否可能使用相同的方法来获取毫秒级别的更精确时间戳?

0
0 Comments

问题的出现原因:

该问题的出现是因为在大多数平台上,可以使用struct timespec中的tv_sec字段来获取秒数,并使用localtimegmtime将其拆分为其组成部分,只保留纳秒部分。

解决方法:

以下是使用ctimelocaltime函数将当前系统时间以毫秒精度打印出来的解决方法的示例代码:

#include 
#include 
int main() {
    struct timespec ts;
    timespec_get(&ts, TIME_UTC);
    time_t seconds = ts.tv_sec;
    printf("%s", ctime(&seconds)); // 仅用于比较
    struct tm *t = localtime(&seconds);
    printf("%04d-%02d-%02dT%02d:%02d:%02d.%09ld\n",
        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.%03ld\n",
    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

通过以上代码和输出结果,可以使用ctime函数和localtime函数将当前系统时间以毫秒精度打印出来。

0