gpt4 book ai didi

c - 获取本地时间(以毫秒为单位)

转载 作者:太空宇宙 更新时间:2023-11-04 02:31:24 25 4
gpt4 key购买 nike

我需要以最快的方式获取本地时间(因此考虑到当前时区)至少以毫秒为单位,如果有可能以十分之一毫秒为单位,那就更好了。

我想避免使用 gettimeofday(),因为它现在是一个过时的函数。

所以,我似乎需要使用 clock_gettime(CLOCK_REALTIME, ...) 并将小时调整为当前时区,但如何操作呢?这样做的最佳点在哪里?在存储通过 clock_gettime 获取的时间戳之前,还是在将其转换为当前时区的公历之前?

编辑:我的原始示例加入了 get_clock 和本地时间 - 有更好的方法来实现吗?

#include <time.h>
#include <stdio.h>

int main() {
struct timespec ts;
clock_gettime(CLOCK_REALTIME, &ts);

struct tm* ptm;
ptm = localtime(&(ts.tv_sec));

// Tenths of milliseconds (4 decimal digits)
int tenths_ms = ts.tv_nsec / (100000L);

printf("%04d-%02d-%02d %02d:%02d:%02d.%04d\n",
1900 + ptm->tm_year, ptm->tm_mon + 1, ptm->tm_mday,
ptm->tm_hour, ptm->tm_min, ptm->tm_sec, tenths_ms);
}

最佳答案

我认为没有比 clock_gettime()localtime() 更好的方法了。但是,您需要正确舍入返回的纳秒,并考虑将时间舍入到下一秒的情况。要格式化时间,您可以使用 strftime() 而不是手动格式化 tm 结构:

#include <time.h>
#include <stdio.h>

int main(void) {
struct timespec ts;
long msec;
int err = clock_gettime(CLOCK_REALTIME, &ts);
if (err) {
perror("clock_gettime");
return 1;
}

// round nanoseconds to milliseconds
if (ts.tv_nsec >= 999500000) {
ts.tv_sec++;
msec = 0;
} else {
msec = (ts.tv_nsec + 500000) / 1000000;
}

struct tm* ptm = localtime(&ts.tv_sec);
if (ptm == NULL) {
perror("localtime");
return 1;
}

char time_str[sizeof("1900-01-01 23:59:59")];
time_str[strftime(time_str, sizeof(time_str),
"%Y-%m-%d %H:%M:%S", ptm)] = '\0';

printf("%s.%03li\n", time_str, msec);
}

关于c - 获取本地时间(以毫秒为单位),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42792633/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com