4

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

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

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

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

4

4 回答 4

6

根据 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 有限公司
http://www.dinkumware.com

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

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

于 2014-08-08T07:42:52.837 回答
6

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

要 100% 可移植,您可以检查difftime().

但是,如果您愿意接受大约 99% 的可移植性,那么您应该可以放心地假设比较按预期进行(这t0 < t1意味着t0实时t1进行)。我从未听说过不起作用的实现。如果不合格,你可以向实施者投诉,但你不能说他们没有确认标准。

于 2014-08-10T10:34:28.323 回答
0

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

于 2014-08-08T07:42:50.170 回答
0

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

于 2014-08-08T08:53:58.230 回答