Mam time.Time
utworzony przy użyciu time.Date()
. Następnie obliczyłem liczbę nanosekund między 1970/1/1 00:00:00.000000000
i tym razem.Dlaczego 2-składnikowe konstrukcje z tą samą datą i czasem zwracają fałsz w porównaniu z ==?
Następnie biorę nanosekundy i zamieniam je z powrotem w time.Time
używając time.Unix()
.
Jednak jeśli porówna się czas odtworzony z oryginałem przy użyciu ==
, zwraca wartość false. Jeśli odejmuję je 2 razy, wynikowy czas wynosi 0. Jeśli porówna się te 2 razy, używając time.Equal()
, zwraca wartość true.
Jeśli utworzę inny czas przy użyciu time.Date()
z tymi samymi wartościami, co za pierwszym razem, użycie ==
w celu porównania tego nowego czasu z oryginalnym czasem daje w wyniku wartość true.
Jest to kod, który demonstruje ten (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
}
Dlaczego czas odtworzony return false w porównaniu z czasem pierwotnego?