Go语言时间戳格式化:Unix时间转标准字符串
在Go语言开发中,经常需要将Unix时间戳(整数类型)转换为人类可读的字符串格式。本文介绍最简洁的方法:利用内置 time 包的 Unix() 和 Format() 函数,配合Go独特的时间布局常量即可完成转换。
核心方法与原理
Go语言的 time 包提供了一种直观的方式来定义时间格式。其关键在于理解Go语言内部用于解析时间的“参考时间”。这个参考时间是:2006-01-02 15:04:05
第1步:获取当前Unix时间戳
目的:获得一个标准的Unix时间戳(自1970年1月1日以来的秒数)。
入口:time.Now().Unix()
动作:调用当前时间对象并转换为Unix秒数。
参数:int64 类型。
package main
import (
"fmt"
"time"
)
func main() {
// 获取当前Unix时间戳
var t int64 = time.Now().Unix()
println(t)
第2步:将时间戳转为time.Time对象
目的:将Unix整数转换为Go的 time.Time 结构体,以便进行格式化。
入口:time.Unix(sec int64, nsec int32)
动作:传入上一步的时间戳。
重要参数:
- sec: Unix秒数
- nsec: 纳秒数(通常为0)
// 将Unix时间戳转换为time.Time对象
var ti time.Time = time.Unix(t, 0)
第3步:使用Format()生成指定格式的字符串
目的:将 time.Time 对象转换为自定义格式的字符串。
入口:(t Time).Format(layout string)
动作:定义布局字符串并调用Format方法。
关键布局说明:
- 2006: 年份
- 01: 月份
- 02: 日期
- 15: 小时(24小时制)
- 04: 分钟
- 05: 秒
- Mon Jan 2 15:04:05 MST 2006 是Go默认的标准布局,可拆解记忆为 1 2 3 4 5 6 的位置关系:月日时分管年。
// 使用指定布局格式化时间
var s string = time.Unix(t, 0).Format("2006-01-02 15:04:05")
println(s)
完整代码示例
以下是完整的可运行代码:
package main
import (
"fmt"
"time"
)
func main() {
// 1. 获取当前Unix时间戳
var t int64 = time.Now().Unix()
// 2. 直接链式调用:Unix() -> Format()
// 注意:time.Unix返回time.Time,然后调用Format
formattedTime := time.Unix(t, 0).Format("2006-01-02 15:04:05")
fmt.Println("Unix时间戳:", t)
fmt.Println("格式化后:", formattedTime)
}
常见时间格式布局
- YYYY-MM-DD HH:MM:SS:
"2006-01-02 15:04:05" - YYYY/MM/DD HH:MM:SS:
"2006/01/02 15:04:05" - 仅年月日:
"2006-01-02" - 仅时分秒:
"15:04:05" - 带毫秒:
"2006-01-02 15:04:05.000" - RFC3339格式:
time.RFC3339("2006-01-02T15:04:05Z07:00")
注意事项
- 必须使用Go的参考时间:
2006-01-02 15:04:05,不能使用其他数字作为占位符。 - 时区问题:
time.Unix()默认使用本地时区。如果需要UTC时间,应使用time.Unix(t, 0).UTC()或设置固定时区。 - 纳秒精度: 如果原始数据包含纳秒,需在第二个参数传入非零值,或使用
time.UnixNano()。
以上就是Go语言中将时间戳格式化的详细内容,更多关于Go语言时间处理的知识请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













