Go 为什么UTC的这两个时间实例相同,而另一个位置的这两个时间实例不同?
我期待这两个Go 为什么UTC的这两个时间实例相同,而另一个位置的这两个时间实例不同?,go,Go,我期待这两个时间。时间实例是相同的。但是,我不确定为什么我得到的比较结果是假的 package main import ( "fmt" "time" ) func main() { t := int64(1497029400000) locYangon, _ := time.LoadLocation("Asia/Yangon") dt := fromEpoch(t).In(locYangon) locYangon2, _ := time.L
时间。时间实例是相同的。但是,我不确定为什么我得到的比较结果是假的
package main
import (
"fmt"
"time"
)
func main() {
t := int64(1497029400000)
locYangon, _ := time.LoadLocation("Asia/Yangon")
dt := fromEpoch(t).In(locYangon)
locYangon2, _ := time.LoadLocation("Asia/Yangon")
dt2 := fromEpoch(t).In(locYangon2)
fmt.Println(dt2 == dt)
}
func fromEpoch(jsDate int64) time.Time {
return time.Unix(0, jsDate*int64(time.Millisecond))
}
如果我将“亚洲/仰光”
更改为“UTC”
,它们是相同的
package main
import (
"fmt"
"time"
)
func main() {
t := int64(1497029400000)
locYangon, _ := time.LoadLocation("UTC")
dt := fromEpoch(t).In(locYangon)
locYangon2, _ := time.LoadLocation("UTC")
dt2 := fromEpoch(t).In(locYangon2)
fmt.Println(dt2 == dt)
}
func fromEpoch(jsDate int64) time.Time {
return time.Unix(0, jsDate*int64(time.Millisecond))
}
注意:我知道Equal
方法(事实上,我已使用Equal
方法进行了修复)。但经过更多测试,我发现了一些有趣的案例,即“UTC”位置与“亚洲/仰光”位置。我期望两者都相等或不相等
更新:添加另一个带有“UTC”的代码段。
Update2:更精确地更新标题(我希望这有助于避免重复)LoadLocation
似乎每次都返回指向新值的指针
无论如何,比较日期的好方法是Equal
:
fmt.Println(dt2.Equal(dt))
操场:。来自时间文档:不要将==与时间值一起使用
。必须使用Equal方法,因为位置作为指针存储在时间结构中,所以要将两个不同的指针值与位置结构进行比较,这就是它们不同的原因。UTC恰好是使用nil指针值的默认值,因此是相等的。这是一个实现细节,没有理由将==与时间值一起使用,使用单调时间的go1.9可能会再次改变行为。@JimB谢谢。请把它作为答案,以便我能接受?相关/可能的副本