Голанг ДжсонМаршал отметка времени Unix - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь json.UnMarshal самостоятельно определенный тип TimeStamp и сталкиваюсь с проблемой точности. Вот пример:

type TimeStamp  int64
type D struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    Ts  TimeStamp   `json:"ts"`
}

func (d TimeStamp) MarshalJSON() ([]byte, error){
    rs :=time.Unix(int64(d),0).Format("2006-01-02")
    js,er := json.Marshal(rs)
    return js,er
}
func (d *TimeStamp) UnmarshalJSON(data []byte) error{
    var rs string
    e := json.Unmarshal(data,&rs)
    if e!=nil{
        return e
    }
    t,er:= time.Parse("2006-01-02", rs)
    if er!=nil{
        return er
    }
    *d = TimeStamp(t.UnixNano())
    return nil
}
func main() {
    d :=D{
        Name:"ft",
        Age:9,
        Ts: (TimeStamp)(time.Now().Unix()),
    }
    js,er:=json.Marshal(d)
    if er!=nil{
        fmt.Println(er.Error())
        return
    }
    fmt.Println("result:",string(js))

    var d2 D
    e:=json.Unmarshal(js,&d2)
    if e!=nil{
        fmt.Println(er.Error())
        return
    }
    fmt.Println("result:",d2)
    fmt.Println(time.Now().Unix())
    fmt.Println(d2.Ts)
}

Я получаю результат как:

result: {"name":"ft","age":9,"ts":"2018-09-30"}
result: {ft 9 1538265600000000000}
1538272374
1538265600000000000

Как вывидно, у немаршальной метки времени длинный хвост.1538265600000000000 как с этим бороться

1 Ответ

0 голосов
/ 30 сентября 2018

Мне жаль, потому что разница между unix () и unixnano ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...