如何准确比较两个时间点?

How to compare two time instants in an accurate way?

我有两个时间实例。 have 我从数据库和 Now() 时间获取。一旦我想使用 After 来比较它们,结果就不是我所期望的。实例如下:

// have => 2022-01-09 09:09:59 +0000 +0000
// now  => 2022-01-09 11:57:08.990265878 +0300 +0300 m=+4.977355713
 
if now.After(have) {
    // ...
}

我预计上述条件会产生 true 结果,而 returns false。为了更好地弄清楚,我用 Unix() 将它们转换为 Unix 时间,令人惊讶的是 have 的值略大于 now,这就是为什么条件 returns false.

显然 nowhave 之后,但它的 Unix 时间小于 have。 当我想知道这个案子时,你能告诉我我错在哪里吗?

更新 问题是关于时区的。 我没有注意到它。所以我添加了以下代码:

loc, _ := time.LoadLocation("Local")
    have = have.In(loc)

然后当我打印出来后,它是这样的:

have => 2022-01-09 12:09:59 +0300 +0300

这就是条件返回 false 的原因。

这两个时间是不同的时区:have是UTC,now+0300。因此,在将它与其他时间进行比较之前,您必须从 now 值的 date/time 部分中减去 3 小时。