为了账号安全,请及时绑定邮箱和手机立即绑定

在 Golang 中从毫秒转换为时间

在 Golang 中从毫秒转换为时间

Go
呼唤远方 2021-10-25 18:30:08
我有一些 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();
查看完整描述

2 回答

?
BIG阳

TA贡献1859条经验 获得超6个赞

在 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.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

}


查看完整回答
反对 回复 2021-10-25
?
尚方宝剑之说

TA贡献1788条经验 获得超4个赞

尝试这个:


func ParseMilliTimestamp(tm int64) time.Time {

    sec := tm / 1000

    msec := tm % 1000

    return time.Unix(sec, msec*int64(time.Millisecond))

}


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 715 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信