time_t在我的平台上是内部的__int64 。 我可以使用< , >和==运算符来比较这些值吗? 我不想知道两个时间值之间的差异。
代码将在Windows上运行,所以我不关心可移植性。
以这种方式比较这些值是否正确?
如何更新date和时间控制面板以匹配W32Time服务configuration?
为什么在Windows上没有boost :: date_time和microsec分辨率?
为什么在多次运行相同的程序时执行时间有所不同?
Linux时间命令高精度
是否有可能在Vim中显示date/时间(超过腻子)?
MSG :: time比timeGetTime晚
如何在Mac OS X下redirect时间命令输出
Linux的时间和date
如何限制Linux采取行动的时间?
时间()保证是闰秒意识?
根据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函数。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。