我有两个 time_t 类型的变量 - varEnd 和 varStart。 现在为了查看它们之间的差异, 我可以执行
varEnd - varStart;
difftime(varEnd, varStart);
同时两者都返回秒数。
请问它们有什么区别?或者哪一个是推荐的?
time_t
是一种表示时间的算术类型。它不要求以任何特定方式表示时间。time_t
按秒数自某一时刻起表示时间,则“-”运算符将正确计算两个time_t
值之间的差异(以秒为单位)。time_t
的位被分成表示年份、月份、天数等的组),那么“-”运算符可能会产生无意义的结果。difftime()
函数“知道”time_t
如何表示时间,并使用该信息来计算以秒为单位的差异。difftime()
函数执行相同的操作,但只有difftime()
保证在所有实现上都能正确工作。difftime()
返回浮点类型double
的结果,而time_t
值上的“-”运算符返回time_t
类型的结果。在大多数情况下,结果将被隐式转换为您分配给它的类型,但如果time_t
恰好是无符号整数类型,则从较晚时间减去较早时间将产生一个非常大的值,而不是负值。我见过的每个系统都将time_t
实现为32位或64位有符号整数类型,但允许使用无符号类型——这是简单地对time_t
值进行减法运算并没有必要有意义的另一个原因。time_t
操作数转换为 double
也不能保证与 difftime
做相同的事情 - 这就是为什么 difftime
存在的原因。请参见我的答案。 - Keith Thompson
C++
? - Paul Rdifftime()
在C和C++中都存在。 - Keith Thompson