使用此结构运行Decode()会产生错误,其中包含' timestamp'柱:
type Metrics struct {
Id int `orm:"column(id);auto"`
Name string `orm:"column(name);size(255);null" json:"metric_name"`
json:"lon"`
Timestamp time.Time `orm:"column(timestamp);type(datetime)" json:"timestamp;omitempty"`
}
错误:
parsing time "1352289160" as ""2006-01-02T15:04:05Z07:00"": cannot parse "1352289160" as """
如何将其解析为time.Time值?
谢谢
答案 0 :(得分:1)
如果您可以将时间戳作为unix时间(我假设它是什么),只需将该字段声明为int64
,即
type Metrics struct {
...
Timestamp int64 `orm:"column(timestamp);type(datetime)" json:"timestamp;omitempty"`
}
然后,您可以使用
将其转换为GoTime
类型
var m Metrics
...
When := time.Unix(m.Timestamp, 0)
另一种选择是为Metrics类型编写自定义UnmarshalJSON
处理程序:
func (this *Metrics) UnmarshalJSON(data []byte) error {
var f interface{}
err := json.Unmarshal(data, &f)
if err != nil { return err; }
m := f.(map[string]interface{})
for k, v := range m {
switch k {
case "metric_name": this.Name = v.(string)
case "timestamp": this.Timestamp = time.Unix(int64(v.(float64)), 0)
...
}
}
}
然后你有适当的时间。结构中的时间值使得使用它更容易。