第一个答案不能保证是可移植的,因为 C 标准不要求time_t
以秒为单位进行测量。
time_t
不过,它是一个真正的类型,所以你可以对它进行算术运算,这确实为我们提供了实现它的途径。您可以设置两个struct tm
sa 秒:
struct tm first;
struct tm second;
time_t ts_first;
time_t ts_second;
double sec_diff;
first.tm_year = 100;
first.tm_mon = 0;
first.tm_mday = 2;
first.tm_hour = 1;
first.tm_minute = 20;
first.tm_second = 20;
first.tm_isdst = -1;
second.tm_year = 100;
second.tm_mon = 0;
second.tm_mday = 2;
second.tm_hour = 1;
second.tm_minute = 20;
second.tm_second = 21;
second.tm_isdst = -1;
将它们转化为time_t
值:
ts_first = mktime(&first);
if ( ts_first == -1 ) {
/* Do your error checking */
}
ts_second = mktime(&second);
if ( ts_second == -1 ) {
/* Do your error checking */
}
呼吁difftime()
他们:
sec_diff = difftime(ts_second, ts_first);
然后你可以乘以sec_diff
你想要的秒数,然后从返回的值中减去它time
。
当然,如果您的可用系统时间分辨率大于一秒,这将不起作用,并且您可以尝试更改tm_min
成员,因为您正在寻找分钟,但这不太可能。