在C语言中,与Java的System.currentTimeMillis()
等价的函数是什么?
在C语言中,与Java的System.currentTimeMillis()
等价的函数是什么?
#include <sys/time.h>
/**
* @brief provide same output with the native function in java called
* currentTimeMillis().
*/
int64_t currentTimeMillis() {
struct timeval time;
gettimeofday(&time, NULL);
int64_t s1 = (int64_t)(time.tv_sec) * 1000;
int64_t s2 = (time.tv_usec / 1000);
return s1 + s2;
}
System.currentTimeMillis()
,并且它们的输出相同。请查看 time.h
,可能会用到类似于 gettimeofday()
函数。
你可以这样做:
struct timeval now;
gettimeofday(&now, NULL);
您可以通过获取 now.tv_sec
和 now.tv_usec
的值来提取时间。
now.tv_sec
和now.tv_usec
分别代表什么单位? - Emil S.CLOCK_MONOTONIC
并不完全等同于Java函数,因为Java函数也受到挂钟调整的影响。当然,对于间隔计时器来说,这是正确的选择,但如果OP想要挂钟时间,它将无济于事。 - bdonlan有一个time()函数,但它返回的是秒而不是毫秒。如果你需要更高的精度,你可以使用特定于平台的函数,比如Windows的GetSystemTimeAsFileTime()或*nix的gettimeofday()。
如果你实际上并不关心日期和时间,只是想计算两个事件之间的时间间隔,就像这样:
long time1 = System.currentTimeMillis();
// ... do something that takes a while ...
long time2 = System.currentTimeMillis();
long elapsedMS = time2 - time1;
如果要用C语言实现,可以使用clock()函数。在Windows系统中,更常用的是GetTickCount()函数。