-1
我期待这两个time.Time
实例是一样的。但是,我不知道为什么我的比较结果是错误的。为什么这两个时间。UTC的时间实例和另一个位置的时间实例相同?
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))
}
如果我改变"Asia/Yangon"
到"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:更新标题更精确(我希望这将有助于避免重复)
从文档时间:'不要使用==与时间值'。您必须使用Equal方法 – JimB
Location作为指针存储在time结构中,因此您将两个不同的指针值与Location结构进行比较,这就是它们不同的原因。 UTC恰好是使用零指针值的默认值,因此相等。这是一个实现细节,没有理由使用==与时间值,并且行为可能会随着使用单调时间的go1.9再次改变。 – JimB
@JimB谢谢。你可以把它作为答案,以便我可以接受吗? –