duanbigan7765
duanbigan7765
2015-07-31 11:22
浏览 116

从毫秒转换为Golang时间

I have a some json data where there is a field called lastModifed contains time in millis. I wanted to convert this data into a struct type with json.UnMarshaller. I have mapped the field with json filed. But the conversion seems not working.

IE :

My Json looks like this:

{
   "name" : "hello",
   "lastModified" : 1438167001716
}

and struct Looks like

type Model struct {
    Name         string    `json:"name"`
    Lastmodified time.Time `json:"lastModified"`
}

looks not converting the time properly. how can i get the time from those millis??

NB: The millis of lastModifiedTime are getting from java System.currentTimeMillis();

图片转代码服务由CSDN问答提供 功能建议

我有一些json数据,其中有一个名为 lastModifed 的字段,以毫秒为单位 。 我想用json.UnMarshaller将此数据转换为结构类型。 我已经用json字段映射了该字段。 但是转换似乎无法正常工作。

IE:

我的Json看起来像这样:

  {
“ name”:“ hello”,
“ lastModified”:1438167001716 
} 
   
 
 

,结构看起来像 \ n

  type模型结构{
名称字符串`json:“ name”`
上次修改时间。时间`json:“ lastModified”`
} 
   
  
 

看起来无法正确转换时间。

注意:lastModifiedTime的毫秒数是从java System.currentTimeMillis(); \ n

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dongxian6741
    dongxian6741 2015-07-31 11:38
    已采纳

    In golang time.Time marshals to JSON using RFC3339, string representation. So you need to unmarshal your json using int64 instead of time.Time and convert after it by yourself:

    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))
    }
    

    Go playground

    Also you can use special wrapper above time.Time and override UnmarshalJSON there:

    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
    }
    

    Go playground

    点赞 评论

相关推荐