在C语言中如何获取距午夜UTC的毫秒数?

7

time.h中的时间函数返回自纪元以来的毫秒数。


5
实际上,time()函数返回自历元以来的秒数,而不是毫秒数(它会忽略闰秒)。 - Jonathan Leffler
5个回答

7
这是精确的方法:
struct timeval tv;
int msec = -1;
if (gettimeofday(&tv, NULL) == 0)
{
    msec = ((tv.tv_sec % 86400) * 1000 + tv.tv_usec / 1000);
}

这将会把从午夜开始到现在时间的毫秒数存入msec。(如果获取时间时发生了错误,则为-1。)

尽管将时间值存储在int中通常是不好的做法,但我有些粗心,并假设int至少是32位,可以轻松容纳(-1)到86,400,000的范围。

但我不知道这是否值得所有的努力。


1
根据我所知的C语言,你的代码似乎有些问题。也许你应该先声明“msec”,并且使用“else”。 - Utkan Gezer

7

这是一个简单的方法:

time_t seconds_since_midnight = time(NULL) % 86400;

要获取从午夜开始的大致毫秒数,请将seconds_since_midnight乘以1000。

如果您需要更高的分辨率(请考虑是否真的需要),则必须使用另一个函数,如gettimeofday()


5
你使用的是在POSIX.1和BSD中定义的gettimeofday(2)函数。
它返回自sys/time.h中的struct timeval所定义的秒和微秒。

0

您可以在这里找到获取时间并将其转换为各种格式的C代码示例。


0

看一下 gmtime() 函数,它可以直接转换为协调世界时 (UTC)...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接