我尝试使用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 如何处理
答案 0 :(得分:0)
对不起,因为它是unix()和unixnano()之间的区别