使用比较运算符比较time_t值

51k*_*51k 3 c++ windows time time-t

我有2个time_t值,我想找出哪个更大。

time_t__int64在我的平台内部。我可以使用<>==运营商比较值?我不想知道两个时间值之间的差异。

该代码将仅在Windows上运行,因此我不在乎可移植性。

以这种方式比较值是否正确?

fil*_*mor 5

根据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按照其他答案的建议使用。

  • 't0 &lt;t1'是安全的,但是标准并不能保证它是有意义的。看我的答案。 (2认同)

Kei*_*son 5

C标准(C ++继承了C的定义time_t)仅表示这time_t是一种能够表示时间的算术类型。它没有说如何做。原则上,实现可以将time_t值定义为某个将来日期为止的秒数,或者可以按该顺序编码月,日,年,小时,分钟和秒。比较time_t值可以保证始终如一地运行(例如,t0 < t1 && t1 < t2隐含t0 < t2),但是比较的结果不一定表示所表示的时间顺序。

要100%可移植,您可以检查的结果difftime()

但如果你愿意接受约99%的便携性,你应该在假设如预期那样比较工作(即安全t0 < t1暗示t0先于t1实时)。我从未听说过无法实现的实现。如果落空了,您可以向实施者投诉,但不能说他们没有确认标准。