对time_t类型变量进行等式检查

时间:2016-09-13 07:58:32

标签: c ctime time-t

我一直在比较从loacal机器和服务器

中取得的2次相等性
time_t local= kernel()->time_now() 

此time_now()返回time_t并使用常规方式获取sys时间

time_t remote =fs->ctime()

获取目录的创建时间..然后当我执行local==remote时它失败了,因为我在客户端和服务器之间有一些微小的差异然后我甚至在接近秒时同步它们。之后它通过了,但是有时它失败了,真的无法预测我的问题是可以使用==而不是time_t或者我必须使用一些std函数我看到difftime()它可以进行相等检查,因为我需要结果bool

2 个答案:

答案 0 :(得分:1)

如果它们可能略有不同,您应该将这些时间之间的差异(使用difftime()计算)与可接受的误差范围进行比较。

你得到这样的布尔:

(fabs(difftime(remote, local)) < epsilon)

fabs是获取difftime返回的double的绝对值(这意味着如果它是负值,它将变为正值),然后将其与epsilon进行比较,这是您接受的分歧

答案 1 :(得分:-1)

/finish在64位机器中是time_t,否则它是long int(在系统中有所不同......也许很长)所以是的,你可以比较。但最好使用long long int来获得准确的结果。

现在difftime()知道这个difftime()意味着什么(如果它基于某一年的某一天,或者time_t的位代表内部的某些东西等等,那么time_t通过哪个difftime()不能。) [如果-基于系统没有指定它与特定点的时间差异那么我们不能在减法中使用time_t而是明确建议使用time_t来在这种情况下获得可预测的结果]

同样difftime()保证工作减去可能会产生错误的结果。 此外,difftime()返回的结果为difftime(),与double不同,-会产生long int,这可能会产生非常大的值,无法存储在time_t中。