golang JSON的元帅时间戳

时间:2018-09-30 02:10:17

标签: go

我尝试使用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 :(得分:0)

对不起,因为它是unix()和unixnano()之间的区别