-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謝謝。你可以把它作爲答案,以便我可以接受嗎? –