如何准确比较两个时间点?
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
.
显然 now
在 have
之后,但它的 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 小时。
我有两个时间实例。 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
.
显然 now
在 have
之后,但它的 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 小时。