【问题标题】:How to compare two time instants in an accurate way?如何准确地比较两个时间点?
【发布时间】: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 的原因。

显然nowhave 之后,但它的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,然后从上述日期/时间中减去它。

标签: go time


【解决方案1】:

这两个时间位于不同的时区:have 是 UTC,now+0300。因此,您必须先从 now 值的日期/时间部分减去 3 小时,然后再将其与其他时间进行比较。

【讨论】:

    猜你喜欢
    • 2021-03-03
    • 1970-01-01
    • 2011-05-31
    • 1970-01-01
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多