Golang time 包常用方法与时间转换详解

码头散步
码头散步
发布时间:2026-10-16| 6人浏览过
原创

在 Golang 开发中,时间处理是高频场景。所有的时间格式转换,包括时间戳与字符串之间的相互转化,均需以 time.Time 类型作为中间核心对象。本文将详细解析如何获取当前或指定时间、进行 Unix 时间戳转换、字符串格式化解析,以及时间的加减运算和逻辑判断。

准备条件

Golang 标准库内置了强大的 time 包,无需额外安装第三方依赖即可直接使用。核心操作围绕 time.Time 结构体展开,它是连接不同时间表现形式(如 UTC 本地时间、Unix 时间戳、自定义格式字符串)的桥梁。

核心操作方法

第一步:获取当前时间与指定时间

目的:获取系统当前的准确时间或构造一个特定的时间点。

操作:

  • 获取当前时间:调用 time.Now(),返回值类型为 time.Time。
t1 := time.Now()
fmt.Println(t1, reflect.TypeOf(t1))
  • 构造指定时间:使用 time.Date() 函数,按顺序传入年、月、日、时、分、秒、纳秒和时区。
t4 := time.Date(2019, 9, 30, 14, 28, 26, 23, time.Local) // 返回 time.Time
fmt.Println(t4)

第二步:Unix 时间戳与 time.Time 的互转

目的:实现 Unix 时间戳(秒/纳秒)与 Go 标准时间对象的转换。

操作:

  • time.Time 转时间戳:直接调用实例方法 .Unix()(秒)或 .UnixNano()(纳秒)。
t1 := time.Now()
t1Second := t1.Unix()      // 获取秒级时间戳
t1Nano := t1.UnixNano()    // 获取纳秒级时间戳
  • 时间戳转 time.Time:使用 time.Unix(sec, nsec)。
timeStamp := 1569826535
t := time.Unix(int64(timeStamp), 0) // 转换为 time.Time 对象

第三步:时间字符串的解析与格式化

目的:将可读的时间字符串转换为时间对象,或将时间对象输出为指定格式的字符串。

关键规则:Golang 使用特定参照时间 Mon Jan 2 15:04:05 MST 2006(即 2006-01-02 15:04:05)作为格式化模板。无论中文还是英文表述,模板中的数字必须严格对应此基准时间。

  • 字符串转 time.Time:使用 time.Parse(layout, value)。
s := "2019年9月30日 15:10:30"
t, err := time.Parse("2006年1月2日 15:4:5", s)
if err != nil {
	fmt.Println(err.Error())
}
// 建议统一转换为标准 ISO 格式以便后续处理
result := t.Format("2006-01-02 15:04:05")
fmt.Println(result)

注意:输入字符串的格式结构必须与布局模板(Layout)完全一致。例如,若输入为 2019-09-30 15:12:14,则模板应写为 2006-01-02 15:04:05。

  • time.Time 转字符串:使用 .Format(layout) 方法。
strTime := t.Format("2006-01-02 15:04:05")
fmt.Println(strTime) // 输出示例: 2019-09-30 14:55:35

第四步:时间信息的提取

目的:从 time.Time 对象中分离出年的、月的、日的等具体数值。

操作:先将任意时间源(如时间戳)转为 time.Time,再调用相关方法。

t := time.Unix(int64(1569826535), 0)

// 批量获取
year, month, day := t.Date()
hour, minute, second := t.Clock()

// 单独获取各字段及星期信息
fmt.Println(t.Year(), t.Month(), t.Day())
fmt.Println(t.Hour(), t.Minute(), t.Second())
fmt.Println(t.Weekday(), t.YearDay()) // 星期几,一年中的第几天

第五步:时间的加减运算

目的:计算过去或未来的某个时间点。

操作:

  • 按时间段加减:使用 .Add(duration),支持负数表示减法。
t := time.Unix(int64(1569826535), 0)

// 减去24小时
t3 := t.Add(-time.Hour * 24)
fmt.Println(t3.Format("2006/01/02 15:04:05"))
  • 按日期组件加减:使用 .AddDate(years, months, days),适用于精确到年月日的操作。
// 减去1个月
T2 := t.AddDate(0, -1, 0)
fmt.Println(t2.Format("2006/01/02 15:04:05"))

第六步:时间大小的比较

目的:判断两个时间点的先后关系或是否相等。

操作:确保对比双方均为 time.Time 类型,返回布尔值。

t := time.Unix(int64(1569826535), 0)

b1 := t.After(time.Now())   // 判断t是否在time.Now()之后
b2 := t.Before(time.Now())  // 判断t是否在time.Now()之前
b3 := t.Equal(t)            // 判断t是否与自身相等

fmt.Println(b1, b2, b3)

完成判断

通过以上步骤,即可完成从时间获取、格式转换、算术运算到逻辑比较的全流程处理。核心在于始终将数据转化为 time.Time 对象进行操作,利用其内置方法保证类型安全与准确性。

简要总结

以上就是 Golang time 包常用方法及时间转换的详细内容,更多关于 Go 语言时间处理与时间戳转换的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。