使用比较运算符比较time_t值

时间:2014-08-08 07:35:47

标签: c++ windows time time-t

我有两个time_t值,我想知道哪一个更大。

time_t在我的平台上内部__int64。我可以使用<>==运算符来比较值吗? 我不想知道两个时间值之间的差异。

代码将在Windows上运行,所以我不关心可移植性。

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

4 个答案:

答案 0 :(得分:5)

根据C标准的 7.27.1(3)部分(在这种情况下C ++标准指的是)time_t真实类型 ,在 6.2.5(17)中定义为整数或浮点类型。

只要你没有明确假设整数(即通过做time_t t; int x = t;)可能会失去精确度,你就是安全的。

修改: 我实际上把它拿走了。如果您转到this link, post #6,则可以阅读以下内容:

  

因为time_t是算术运算,这并不意味着它会存储时间   作为提前时间的单调递增值。实际上,我们的标准   C库不保证t1&lt; t2比t1晚t2。我们弃了一个   有限的可表示值范围不同系统的不同方式。

     

P.J。 Plauger
  Dinkumware,Ltd。
  http://www.dinkumware.com

由于Dinkumware在Windows系统上被广泛使用(虽然我不知道这是否适用于C ++标准库)我认为这是相关的。

tl; dr:按照其他答案中的建议使用std::difftime

答案 1 :(得分:5)

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

要100%便携,您可以查看difftime()的结果。

但是如果你愿意接受99%左右的可移植性,你应该安全地假设比较按预期工作(t0 < t1暗示t0实时在t1之前)。我从来没有听说过一个不起作用的实现。如果它下降,你可以向实施者投诉,但你不能说他们没有确认标准。

答案 2 :(得分:0)

是的,您可以在有限的情况下使用普通的比较运算符。可能有其他系统无法正常工作,但现代Linux和Windows操作系统可以很好地比较time_t值。

答案 3 :(得分:0)

假设time_t对您的用例具有足够高的分辨率,那么您可以。如果您需要更高的分辨率而Windows是唯一的问题,那么请考虑切换到处理FILETIME类型的Win32函数。