【发布时间】:2022-01-09 09:15:01
【问题描述】:
我有两个时间实例。 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 结果,而它返回false。为了更好地解决这个问题,我使用Unix() 将它们转换为Unix 时间,令人惊讶的是have 的值略大于now,这就是条件返回false 的原因。
显然now 在have 之后,但它的Unix 时间小于have。
由于我想知道此案,请您告诉我我哪里错了?
更新 问题在于时区。 我没有注意到它。所以我添加了以下代码:
loc, _ := time.LoadLocation("Local")
have = have.In(loc)
然后我打印出来后是这样的:
have => 2022-01-09 12:09:59 +0300 +0300
这就是条件返回 false 的原因。
【问题讨论】:
-
11:57 +0300 是 08:57 UTC。所以不是在 09:09 UTC 之后,而是在之前。
-
@rustyx,没错,我没有注意到时区,也不知道它们也影响了Unix时间。
-
是的,独立于 go,unix 时间定义为自 1970 年 1 月 1 日 00:00 UTC 以来经过的秒数。因此,要将本地时间转换为 unix 时间,您需要(例如)将您的时间转换为 UTC,然后从上述日期/时间中减去它。