Времената в BSON са представени като UTC милисекунди от епохата на Unix (spec ). Времевите стойности в Go са с наносекунда точност.
За стойности на времето за отиване и връщане чрез BSON маршалинг използвайте времена, съкратени до милисекунди от епохата на Unix:
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()),
}
Можете също да използвате Time.Truncate метод:
u := user{
Username: "test_bson_username",
Password: "1234",
UserAccessibility: "normal",
RegisterationTime: time.Now().Truncate(time.Millisecond),
}
Този подход разчита на факта, че епохата на Unix и нулевото време на Go се различават с цял брой милисекунди.