22

我有 2 个 time_t 类型的变量 - varEnd 和 varStart。现在为了看看他们之间的区别我可以做

varEnd - varStart; 

或者

difftime(varEnd, varStart);

并且都返回秒数。

请告诉我,如果他们有什么区别?或者哪个是推荐的?

4

2 回答 2

35

该语言指定这time_t是一种能够表示时间的算术类型。它不要求它以任何特定方式表示时间。

如果time_t将时间表示为自某个时刻以来的秒数,则-操作员将正确计算两个time_t值之间的秒差。

如果不是(例如,如果粒度是一毫秒,或者如果 a 的位time_t被分成代表年、月、日等的组),那么-操作符可能会产生毫无意义的结果。

difftime()另一方面,该函数“知道” a 如何time_t表示时间,并使用该信息计算以秒为单位的差异。

在大多数实现上,简单的减法和difftime()碰巧做同样的事情——但只能保证在所有实现上都能difftime()正常工作。

另一个区别:difftime()返回浮点类型的结果double,而"-"on time_tvalues 产生类型的结果time_t。在大多数情况下,结果将隐式转换为您分配给它的任何类型,但如果time_t碰巧是无符号整数类型,则从较早的时间减去较晚的时间将产生一个非常大的值而不是负值。我见过的每个系统都实现time_t为 32 位或 64 位有符号整数类型,但允许使用无符号类型——另一个原因是简单的time_t值减法没有必要有意义。

于 2012-12-13T08:39:14.887 回答
2

difftime() 返回一个浮点双精度,除非您先将它们转换为双精度,否则只需减去它们就不会。
来源:这里

于 2012-12-13T08:37:14.027 回答