使用比较运算符比较time_t值

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

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

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

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

Solutions Collecting From Web of "使用比较运算符比较time_t值"

根据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 ++从中继承了time_t的定义)只是说time_t是一种能够表示时间的算术类型。 它没有提到如何这样做。 原则上,一个实现可以将time_t值定义为直到某个未来日期的秒数,或者可以按照该顺序对月,日,年,小时,分钟和秒进行编码。 比较time_t值保证表现一致(例如t0 < t1 && t1 < t2意味着t0 < t2 ),但是比较的结果并不一定说明所表示的时间顺序。

为了100%可移植,你可以检查difftime()的结果。

但是如果你愿意承担99%左右的可移植性,那么假定比较按预期工作(即t0 < t1意味着t0实时在t1之前)应该是安全的。 我从来没有听说过一个实施不起作用)。 如果出现问题,可以向实施者投诉,但不能说他们没有达到标准。

是的,您可以在有限的情况下使用正常的比较运营商。 可能有其他系统在这种情况下不起作用,但现代Linux和Windows操作系统可以很好地比较time_t值。

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