在 Golang 中从毫秒转换为时间

我有一些 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 的毫秒数来自 java System.currentTimeMillis();


呼唤远方
浏览 716回答 2
2回答

BIG阳

在 golang 中time.Time,使用RFC3339字符串表示将 JSON 编组。所以你需要自己解组你的jsonint64而不是使用time.Time它并在它之后转换: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.Timefunc (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}

尚方宝剑之说

尝试这个:func ParseMilliTimestamp(tm int64) time.Time {    sec := tm / 1000    msec := tm % 1000    return time.Unix(sec, msec*int64(time.Millisecond))}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go