我有一些json数据,其中有一个名为 lastModifed 的字段包含以毫秒为单位的时间。我想用json.UnMarshaller将这些数据转换为结构类型。我用json提交了字段。但转换似乎无效。
IE:
我的Json看起来像这样:
{
"name" : "hello",
"lastModified" : 1438167001716
}
和struct看起来像
type Model struct {
Name string `json:"name"`
Lastmodified time.Time `json:"lastModified"`
}
看起来没有正确地转换时间。我怎样才能从那些毫克中获得时间?
注意:lastModifiedTime的millis来自java System.currentTimeMillis();
答案 0 :(得分:21)
在golang time.Time
使用RFC3339编组到JSON,字符串表示。所以你需要使用int64
而不是time.Time
来解组你的json并自己转换它:
type Model struct {
Name string `json:"name"`
Millis int64 `json:"lastModified"`
}
func (m Model) Lastmodified() time.Time {
return time.Unix(0, m.Millis * int64(time.Millisecond))
}
此外,您可以使用time.Time
上方的特殊包装并在那里覆盖UnmarshalJSON:
type Model struct {
Name string `json:"name"`
Lastmodified javaTime `json:"lastModified"`
}
type javaTime time.Time
func (j *javaTime) UnmarshalJSON(data []byte) error {
millis, err := strconv.ParseInt(string(data), 10, 64)
if err != nil {
return err
}
*j = javaTime(time.Unix(0, millis * int64(time.Millisecond)))
return nil
}
答案 1 :(得分:1)
试试这个:
func ParseMilliTimestamp(tm int64) time.Time {
sec := tm / 1000
msec := tm % 1000
return time.Unix(sec, msec*int64(time.Millisecond))
}