3

有没有一种简单的方法来确定给定的实现应用了多少(如果有)闰秒:

time_t unix_seconds = mktime(&my_tm);

例如,my_tm 中是否填充了一个字段?

否则,我想我的选项是测试已知 time_t 值在给定时间与闰秒转换接壤,但如果有更方便的东西会很好。

4

2 回答 2

1

您可能可以将问题简化为找出两次之间有多少闰秒time_t

要找到它,您可以计算 tm 结构的时间tatb,并通过执行 计算自上一小时以来经过的秒数 aTmStruct->tm_min*60 + aTmStruct->tm_sec。将其存储为secAsecB

然后计算difftime和。现在应该给你闰秒的数量,只要它们在和之间少于 3600 闰秒。基本上,如果插入闰秒,则 difftime 应该比 secA 和 secB 之间的差值大一。tatb(diff + secB - secA) % 3600tatb

于 2013-10-19T13:13:53.023 回答
0

您可以循环执行您的实现并计算所需的平均时间。

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" 是花费的时间,以毫秒为单位

于 2013-07-22T12:25:58.583 回答