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