sad*_*lil 14 json go unmarshalling
我有一些json数据,其中有一个名为lastModifed的字段包含以毫秒为单位的时间.我想用json.UnMarshaller将这些数据转换为结构类型.我用json提交了字段.但转换似乎无效.
IE:
我的Json看起来像这样:
{
"name" : "hello",
"lastModified" : 1438167001716
}
Run Code Online (Sandbox Code Playgroud)
和struct看起来像
type Model struct {
Name string `json:"name"`
Lastmodified time.Time `json:"lastModified"`
}
Run Code Online (Sandbox Code Playgroud)
看起来没有正确地转换时间.我怎么能从那些毫克中获得时间?
注意:lastModifiedTime的millis来自java System.currentTimeMillis();
Ron*_*Dev 25
在time.Time使用RFC3339的 golang marshals to 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))
}
Run Code Online (Sandbox Code Playgroud)
你也可以使用上面的特殊包装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
}
Run Code Online (Sandbox Code Playgroud)
Cas*_*sio 19
您可以使用UnixMilli以下方法time:
myTime := time.UnixMilli(myMilliseconds)
Run Code Online (Sandbox Code Playgroud)
参考: https: //pkg.go.dev/time#UnixMilli
尝试这个:
func ParseMilliTimestamp(tm int64) time.Time {
sec := tm / 1000
msec := tm % 1000
return time.Unix(sec, msec*int64(time.Millisecond))
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12245 次 |
| 最近记录: |