【发布时间】:2013-07-20 19:27:21
【问题描述】:
是否有一种简单的方法可以确定为给定的实现应用了多少(如果有)闰秒:
time_t unix_seconds = mktime(&my_tm);
例如,my_tm 中是否填充了一个字段?
否则,我想我的选择是测试已知 time_t 值在给定时间与闰秒转换接壤,但如果有更方便的东西会很好。
【问题讨论】:
标签: posix time-t leap-second
是否有一种简单的方法可以确定为给定的实现应用了多少(如果有)闰秒:
time_t unix_seconds = mktime(&my_tm);
例如,my_tm 中是否填充了一个字段?
否则,我想我的选择是测试已知 time_t 值在给定时间与闰秒转换接壤,但如果有更方便的东西会很好。
【问题讨论】:
标签: posix time-t leap-second
您可以将问题简化为找出两个time_t 时间之间有多少闰秒。
要找到它,您可以计算ta 和tb 两个时间的 tm 结构,并计算自上一小时以来经过的秒数
aTmStruct->tm_min*60 + aTmStruct->tm_sec。
将其存储为 secA 和 secB。
然后计算ta和tb的difftime。现在(diff + secB - secA) % 3600 应该给你闰秒的数量,只要它们在ta 和tb 之间的闰秒少于3600 秒。基本上,如果插入闰秒,则 difftime 应该比 secA 和 secB 之间的差值大一。
【讨论】:
您可以循环执行您的实现并计算它所花费的平均时间。
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”是以毫秒为单位的时间
【讨论】: