Go的time包基于time.Time和time.Duration类型,通过固定参考时间"Mon Jan 2 15:04:05 MST 2006"定义layout进行时间解析与格式化,使用time.Now()、time.Date()、time.Parse()创建时间,Format()输出,Add()、Sub()、Before()、After()、Equal()完成计算比较,推荐显式指定时区如UTC或LoadLocation,并用Unix()等方法处理时间戳,避免精度丢失。

Go 的 time 包是处理时间最核心、最常用的工具,它不依赖系统时区配置,所有操作都基于 time.Time 类型和 time.Duration 类型,清晰、安全、不易出错。
Go 中时间必须显式创建,不能像字符串那样直接赋值。常用方式有:
time.Now():获取当前本地时间(带时区信息)time.Date(year, month, day, hour, min, sec, nsec, loc):按字段构造时间,month 是 time.Month 类型(如 time.January),loc 通常用 time.Local 或 time.UTC
time.Parse(layout, value):按固定 layout 解析字符串。注意:Go 的 layout 不是格式化符号(如 YYYY-MM-DD),而是用 参考时间 "Mon Jan 2 15:04:05 MST 2006" 的对应位置来定义——这是 Go 唯一且必须记住的模板例如:time.Parse("2006-01-02 15:04:05", "2024-05-20 10:30:45") 可正确解析;而用 "YYYY-MM-DD" 会失败。
用 t.Format(layout) 将 time.Time 转为字符串。layout 规则同上,仍基于参考时间:
立即学习“go语言免费学习笔记(深入)”;
t.Format("2006-01-02") → "2024-05-20"
t.Format("2006/01/02 15:04:05") → "2024/05/20 10:30:45"
t.Format(time.RFC3339) → "2024-05-20T10:30:45+08:00",适合 API 传输时间运算通过 Duration 类型完成,它是纳秒级整数,支持加减:
t.Add(24 * time.Hour):加一天t.Add(-7 * 24 * time.Hour):减一周t.Sub(otherTime):返回 Duration,表示两时间间隔==、Before()、After()、Equal()(注意:带时区的时间比较才真正有意义)⚠️ 避免用 t1.Unix() == t2.Unix() 判断相等——会丢失纳秒精度,应直接用 t1.Equal(t2)。
Go 默认使用本地时区,但推荐显式指定以避免歧义:
time.Now().In(time.UTC):转为 UTC 时间time.Now().In(loc):转到指定时区,可用 time.LoadLocation("Asia/Shanghai") 加载标准时区time.Unix(sec, nsec) 构造时间;t.Unix() 或 t.UnixMilli() 获取对应整数json.Marshal 使用 time.Time 的默认 RFC3339 格式,或自定义 MarshalJSON 方法统一为毫秒时间戳基本上就这些。time 包设计克制,没有“昨天”“下个月”这类模糊方法,靠组合基础操作实现逻辑,看似多写几行,实则稳定可控。
以上就是Golang如何处理时间类型_Golang time包常见语法基础的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号