
本文介绍如何在 Go 中将 JSON 中以字符串形式存在的 Unix 时间戳(如 "1490846400")可靠地解析为 time.Time,涵盖基础转换逻辑、错误处理及实际使用建议。
本文介绍如何在 go 中将 json 中以字符串形式存在的 unix 时间戳(如 "1490846400")可靠地解析为 `time.time`,涵盖基础转换逻辑、错误处理及实际使用建议。
在 Go 的标准库中,time 包并未提供直接将 Unix 时间戳字符串(如 "1490846400")转为 time.Time 的内置函数。但借助 strconv.ParseInt 和 time.Unix,我们可以轻松实现这一转换,且保持类型安全与错误可追溯性。
以下是一个健壮、可复用的转换函数:
import (
"strconv"
"time"
)
func stringToTime(s string) (time.Time, error) {
sec, err := strconv.ParseInt(s, 10, 64)
if err != nil {
return time.Time{}, err // 返回零值 time.Time + 原始错误
}
return time.Unix(sec, 0), nil
}
✅ 使用示例:
将任意网站转换为文件系统,自动抓取网站并将页面挂载为 Markdown 文件,可使用 grep、diff、cat 等标准 Unix 命令进行搜索、比较、读取和浏览。
t, err := stringToTime("1490846400")
if err != nil {
log.Fatal(err)
}
fmt.Println(t) // 输出:2017-03-30 04:00:00 +0000 UTC
⚠️ 注意事项:
- 输入字符串必须仅含数字(不含空格、引号或小数点),否则
ParseInt将返回错误; - 若时间戳可能为毫秒级(如 JavaScript 生成的
1609459200000),需先除以 1000 并保留纳秒部分:time.Unix(sec, (ms%1000)*1e6); - 在 JSON 解析场景中,推荐结合自定义
UnmarshalJSON方法封装到结构体字段,避免重复转换逻辑; -
time.Unix(sec, 0)假设时间为秒级精度,且时区为 UTC —— 如需本地时区显示,可通过.In(loc)调整,但内部时间值仍以 UTC 存储。
总结:该转换模式简洁、高效、符合 Go 的错误处理惯用法,适用于日志分析、API 响应解析、配置文件读取等典型场景,是处理 Unix 时间戳字符串的推荐实践。










