有没有一种简单的方法来确定给定的实现应用了多少(如果有)闰秒:
time_t unix_seconds = mktime(&my_tm);
例如,my_tm 中是否填充了一个字段?
否则,我想我的选项是测试已知 time_t 值在给定时间与闰秒转换接壤,但如果有更方便的东西会很好。
有没有一种简单的方法来确定给定的实现应用了多少(如果有)闰秒:
time_t unix_seconds = mktime(&my_tm);
例如,my_tm 中是否填充了一个字段?
否则,我想我的选项是测试已知 time_t 值在给定时间与闰秒转换接壤,但如果有更方便的东西会很好。
您可能可以将问题简化为找出两次之间有多少闰秒time_t
。
要找到它,您可以计算 tm 结构的时间ta
和tb
,并通过执行 计算自上一小时以来经过的秒数
aTmStruct->tm_min*60 + aTmStruct->tm_sec
。将其存储为secA
和secB
。
然后计算difftime
和。现在应该给你闰秒的数量,只要它们在和之间少于 3600 闰秒。基本上,如果插入闰秒,则 difftime 应该比 secA 和 secB 之间的差值大一。ta
tb
(diff + secB - secA) % 3600
ta
tb
您可以循环执行您的实现并计算所需的平均时间。
int i_loop = 0;
float diff = 0 ;
struct timeval tv1,tv2;
struct timezone tz;
int k = 0;
N = 128;
time_t unix_seconds ;
while(true)
{
i_loop = (k & N-1);
if(i_loop= == 0)
{
gettimeofday(&tv2,&tz);
//here put your code
unix_seconds = mktime(&my_tm);
//end of your code
diff = (tv2.tv_sec-tv1.tv_sec) * 1000L ;
diff = diff/N;
gettimeofday(&tv1,&tz);
}
k++;
}
"diff" 是花费的时间,以毫秒为单位