根据C标准的7.27.1(3)节(在这种情况下,C ++标准指的是) time_t是实型,在6.2.5(17)中定义为整数或浮点型。
只要您没有明确假设整数(即通过进行运算time_t t; int x = t;)就可能会失去精度,那么您就很安全。
编辑:我实际上收回了。如果转到此链接,请发布#6,您可以阅读以下内容:
仅仅因为time_t是算术运算,并不意味着它将时间存储为单调递增值以提高时间。实际上,我们的标准C库不保证t2迟于t1时t1 <t2。我们针对不同系统以不同方式折叠有限范围的可表示值。
PJ Plauger
Dinkumware,Ltd.http :
//www.dinkumware.com
由于Dinkumware已在Windows系统上广泛使用(尽管我不知道C ++标准库是否也适用),因此我认为这很重要。
tl; dr:std::difftime按照其他答案的建议使用。
C标准(C ++继承了C的定义time_t)仅表示这time_t是一种能够表示时间的算术类型。它没有说如何做。原则上,实现可以将time_t值定义为到某个将来日期为止的秒数,或者可以按该顺序编码月,日,年,小时,分钟和秒。比较time_t值可以保证始终如一地运行(例如,t0 < t1 && t1 < t2隐含t0 < t2),但是比较的结果不一定表示所表示的时间顺序。
要100%可移植,您可以检查的结果difftime()。
但如果你愿意接受约99%的便携性,你应该在假设如预期那样比较工作(即安全t0 < t1暗示t0先于t1实时)。我从未听说过无法实现的实现。如果落空了,您可以向实施者投诉,但不能说他们没有确认标准。