У меня есть time.Time
, созданный с использованием time.Date()
. Затем я рассчитываю количество наносекунд между 1970/1/1 00:00:00.000000000
и тем временем.Почему 2 временных структуры с одинаковой датой и временем возвращают false по сравнению с ==?
Затем я возьму наносекунды и верну их обратно в time.Time
с помощью time.Unix()
.
Однако, если я сравниваю восстановленное время с оригиналом, используя ==
, он возвращает false. Если я вычитаю эти 2 раза, результирующая продолжительность равна 0. Если я сравню эти 2 раза, используя time.Equal()
, он вернет true.
Если я создаю другое время, используя time.Date()
с теми же значениями, что и в первый раз, используя ==
, чтобы сравнить это новое время, и исходное время приводит к истине.
Это код, который демонстрирует это (Golang Playground):
package main
import (
"fmt"
"time"
)
func main() {
t1 := time.Date(2016, 4, 14, 1, 30, 30, 222000000, time.UTC)
base := time.Date(1970, 1, 1, 0, 0, 0, 0, t1.Location())
nsFrom1970 :=t1.Sub(base).Nanoseconds() // Calculate the number of nanoseconds from 1970/1/1 to t1
t2 := time.Unix(0, nsFrom1970)
fmt.Println(t1)
fmt.Println(t2)
fmt.Println(t1.Sub(t2)) // 0
fmt.Println(t1 == t2) //false
fmt.Println(t1.Equal(t2)) //true
t3 := time.Date(2100, 2, 1, 21, 21, 21, 222000000, time.UTC)
fmt.Println(t1 == t3) //true
}
Почему восстановленное время возвращать ложь, когда по сравнению с исходным временем?