我有两个time_t
值,我想知道哪一个更大。
time_t
在我的平台上内部__int64
。我可以使用<
,>
和==
运算符来比较值吗?
我不想知道两个时间值之间的差异。
代码将在Windows上运行,所以我不关心可移植性。
以这种方式比较值是否正确?
答案 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函数。