
本文介绍如何使用 Go 标准库的 time.Parse 和 Time.Unix() 方法,将形如 "1/2/2006, 15:04:05" 的日期时间字符串安全、准确地转换为自 Unix 纪元(1970-01-01 00:00:00 UTC)起经过的整秒数。
本文介绍如何使用 go 标准库的 `time.parse` 和 `time.unix()` 方法,将形如 `"1/2/2006, 15:04:05"` 的日期时间字符串安全、准确地转换为自 unix 纪元(1970-01-01 00:00:00 utc)起经过的整秒数。
在 Go 中,将日期时间字符串转为 Unix 时间戳(单位:秒)是一个常见需求,例如用于日志排序、缓存过期计算或与后端 API 交互。Go 的 time 包提供了简洁而严谨的解决方案:先用 time.Parse 按指定布局解析字符串为 time.Time 类型,再调用其 Unix() 方法获取自 Unix 纪元起的秒数(返回 int64 类型)。
⚠️ 注意:Go 使用固定参考时间 "Mon Jan 2 15:04:05 MST 2006"(即 01/02 03:04:05 PM '06 -0700)作为布局模板——这不是任意格式,而是唯一能正确映射各时间组件的魔术字符串。因此,对于输入 "1/2/2006, 15:04:05",对应布局应为 "1/2/2006, 15:04:05"(注意:月份、日期、年份、时分秒均需严格匹配位置和分隔符)。
以下是一个完整可运行示例:
package main
import (
"fmt"
"log"
"time"
)
func main() {
layout := "1/2/2006, 15:04:05"
input := "1/2/2006, 15:04:05"
t, err := time.Parse(layout, input)
if err != nil {
log.Fatal("解析失败:", err)
}
seconds := t.Unix() // 返回 int64,单位为秒(UTC)
fmt.Printf("原始时间: %s\n", t.Format(time.RFC3339))
fmt.Printf("对应 Unix 秒数: %d\n", seconds)
// 输出示例:原始时间: 2006-01-02T15:04:05Z → 对应 Unix 秒数: 1136214245
}✅ 关键要点总结:
- time.Parse(layout, value) 是唯一推荐的字符串解析方式,不依赖正则或手动拆分;
- 布局字符串必须字面量匹配参考时间格式,不可用 MM/DD/YYYY 等惯用缩写;
- t.Unix() 返回的是 UTC 时间戳,与本地时区无关(Go 内部统一以 UTC 存储 Time);
- 若需毫秒级精度,可用 t.UnixMilli()(Go 1.17+);纳秒级可用 t.UnixNano();
- 解析失败时务必检查布局是否与输入完全一致(如空格、逗号、斜杠、24 小时制等),常见错误包括误用 01/02/2006(导致月份/日期错位)或忽略 , 后的空格。
通过这一组合,开发者可在零外部依赖下,高效、可靠地完成日期时间到秒级时间戳的转换。










