【发布时间】:2017-09-11 20:45:42
【问题描述】:
我正在读取一个包含 Unix 纪元日期的 JSON 文件,但它们是 JSON 中的字符串。在Go中,我可以将“1490846400”形式的字符串转换为Go time.Time吗?
【问题讨论】:
我正在读取一个包含 Unix 纪元日期的 JSON 文件,但它们是 JSON 中的字符串。在Go中,我可以将“1490846400”形式的字符串转换为Go time.Time吗?
【问题讨论】:
time包中没有这个功能,但是写起来很简单:
func stringToTime(s string) (time.Time, error) {
sec, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return time.Time{}, err
}
return time.Unix(sec, 0), nil
}
【讨论】:
@Ainar-G 提供的答案没有错或不正确,但可能更好的方法是使用自定义 JSON 解组器:
type EpochTime time.Time
func (et *EpochTime) UnmarshalJSON(data []byte) error {
t := strings.Trim(string(data), `"`) // Remove quote marks from around the JSON string
sec, err := strconv.ParseInt(t, 10, 64)
if err != nil {
return err
}
epochTime := time.Unix(sec,0)
*et = EpochTime(epochTime)
return nil
}
然后在您的结构中,将time.Time 替换为EpochTime:
type SomeDocument struct {
Timestamp EpochTime `json:"time"`
// other fields
}
【讨论】: