Zeiten in BSON werden als UTC-Millisekunden seit der Unix-Epoche (spec ) dargestellt ). Zeitwerte in Go haben eine Genauigkeit von Nanosekunden.
Um time.Time-Werte durch BSON-Marshalling zu runden, verwenden Sie seit der Unix-Epoche auf Millisekunden verkürzte Zeiten:
func truncate(t time.Time) time.Time {
return time.Unix(0, t.UnixNano()/1e6*1e6)
}
...
u := user{
Username: "test_bson_username",
Password: "1234",
UserAccessibility: "normal",
RegisterationTime: truncate(time.Now()),
}
Sie können auch Time.Truncate verwenden Methode:
u := user{
Username: "test_bson_username",
Password: "1234",
UserAccessibility: "normal",
RegisterationTime: time.Now().Truncate(time.Millisecond),
}
Dieser Ansatz beruht auf der Tatsache, dass sich die Unix-Epoche und die Go-Zero-Zeit um eine ganze Zahl von Millisekunden unterscheiden.