lastModifedというフィールドがミリ秒単位で含まれているjsonデータがあります。このデータをjson.UnMarshallerで構造体型に変換したかったのです。フィールドをjsonでマップしました。しかし、変換が機能していないようです。
IE:
私のJsonは次のようになります。
_{
"name" : "hello",
"lastModified" : 1438167001716
}
_
と構造体は次のようになります
_type Model struct {
Name string `json:"name"`
Lastmodified time.Time `json:"lastModified"`
}
_
時間を正しく変換していないように見えます。これらのミリ秒から時間を取得するにはどうすればよいですか?
注意:lastModifiedTimeのミリ秒はJava System.currentTimeMillis();
から取得されます
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
}