您正在尝试比较两个时间实例,但结果不是您所期望的。
您有两个函数GenerateWIB和GenerateUTC 来更改给定时间的时区。 GenerateUTC 工作正常,而GenerateWIB 则不行。
比较两个时间的代码是:
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if res != expect { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
此比较的结果始终为 false,即使这两个时间是相同。
问题是您正在使用 == 运算符来比较两个 time.Time 实例。 == 运算符比较两个结构体的所有字段的值,包括 Location 字段。
Location 字段指定时间实例的时区。在您的情况下,expect 的时区为 wib,而 res 的时区为 UTC。这就是 == 运算符返回 false 的原因。
要正确比较两个 time.Time 实例,您应该使用 Equal 方法。 Equal 方法比较两个结构体的 wall 和 ext 字段的值,这些字段代表时间点。 Equal 方法会忽略 Location 字段。
以下是更正后的代码:
<code class="go">expect := time.Date(2016, 12, 12, 1, 2, 3, 4, wib) t1 := time.Date(2016, 12, 12, 1, 2, 3, 4, time.UTC) res := GenerateWIB(t1) if !res.Equal(expect) { fmt.Printf("WIB Expect %+v, but get %+v", expect, res) }</code>
现在,比较的结果为 true,这是正确的结果。
在比较两个 time.Time 实例时,Equal 方法比 == 运算符更准确。 Equal 方法仅考虑时间瞬间,而 == 运算符还考虑时区。
一般情况下,您应该使用 Equal 方法来比较两个 time.Time 实例,除非您有特定原因使用 == 运算符。
以上是为什么使用 == 运算符比较 Time.Time 实例会返回 False,即使它们表示相同的时间?的详细内容。更多信息请关注PHP中文网其他相关文章!