Golang如何处理时间类型_Golang time包常见语法基础

1次阅读

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()等方法处理时间戳,避免精度丢失。

Golang如何处理时间类型_Golang time包常见语法基础

Go 的 time 包是处理时间最核心、最常用的工具,它不依赖系统时区配置,所有操作都基于 time.Time 类型和 time.Duration 类型,清晰、安全、不易出错。

创建和解析时间

Go 中时间必须显式创建,不能像字符串那样直接赋值。常用方式有:

  • time.Now():获取当前本地时间(带时区信息)
  • time.Date(year, month, day, hour, min, sec, nsec, loc):按字段构造时间,monthtime.Month 类型(如 time.January),loc 通常用 time.Localtime.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语言免费学习笔记(深入)”;

Golang如何处理时间类型_Golang time包常见语法基础

Listnr

ai文本到语音生成器

Golang如何处理时间类型_Golang time包常见语法基础 180

查看详情 Golang如何处理时间类型_Golang time包常见语法基础

  • 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") 加载标准时区
  • Unix 时间戳转换:time.Unix(sec, nsec) 构造时间;t.Unix()t.UnixMilli() 获取对应整数
  • 数据库jsON 场景中,常配合 json.Marshal 使用 time.Time 的默认 RFC3339 格式,或自定义 MarshalJSON 方法统一为毫秒时间戳

基本上就这些。time 包设计克制,没有“昨天”“下个月”这类模糊方法,靠组合基础操作实现逻辑,看似多写几行,实则稳定可控。

text=ZqhQzanResources