Ho un time.Time
creato utilizzando time.Date()
. Quindi calcolo il numero di nanosecondi tra 1970/1/1 00:00:00.000000000
e quella volta.Perché le 2 strutture temporali con la stessa data e ora restituiscono false se confrontate con ==?
Quindi prendo i nanosecondi e li trasformo in time.Time
utilizzando time.Unix()
.
Tuttavia, se si confronta il tempo ricostituito con l'originale utilizzando ==
, restituisce false. Se sottraggo queste 2 volte, la durata risultante è 0. Se confronto queste 2 volte usando time.Equal()
, restituisce true.
Se creo un'altra volta utilizzando time.Date()
con gli stessi valori della prima volta, utilizzando ==
per confrontare questo nuovo orario e il tempo originale risulta in un valore vero.
Questo è il codice che dimostra questa (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
}
Perché il tempo ricostituito restituire false se confrontato con il tempo originale?