Intro
在 GoLang, 内置的 time 为处理时间提供了方法。
时间包提供测量和显示时间的功能。
日历计算始终基于公历,不设闰秒。
操作系统同时提供“墙钟”(会因时钟同步而发生变化)和“单调时钟”(不会发生变化)。
本软件包并未拆分 API,而是将 time.Now返回的 Time 对象同时包含墙钟读数和单调时钟读数;后续的报时操作使用墙钟读数,而后续的计时操作(特别是比较和减法)则使用单调时钟读数。
下方是示例。
获取时间
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now() // 返回本地时区的当前时间
fmt.Println(now) // 2026-01-01 00:00:00.123456789 +0800 CST m=+0.000046490
fmt.Println(now.Unix()) // 秒级时间戳
fmt.Println(now.UnixMilli()) // 毫秒级时间戳
fmt.Println(now.UnixNano()) // 纳秒级时间戳
}其理应输出为
2026-08-15 09:45:03.410643554 +0800 CST m=+0.000046490
1786758303
1786758303410
1786758303410643554格式化
Go 可以按照指定的格式输出时间。
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05 Monday Jan"))
}其输出为:
2026-08-15 09:27:08 Saturday Aug1获取 Unix 时间戳
了解时间戳
时间戳 是一组字符序列或编码信息.
使用 time.Now().Unix() 来获取 Unix 时间戳能够测定一段时间,起到秒表/倒计时的效果。
sleep
time.Sleep() 可以挂起当前进程一定的时间,期间将被阻塞,直到恢复运行状态。
package main
import (
"fmt"
"time"
)
func main() {
start := time.Now()
fmt.Println(start)
time.Sleep(time.Second * 2)
end := time.Now()
fmt.Println(end)
}上方代码输出结果参考:
2009-11-10 23:00:00 +0000 UTC m=+0.000000001
2009-11-10 23:00:02 +0000 UTC m=+2.000000001时间单位参考
time 包中使用 int64 来存储时间。
此外, time.Duration 可以作为变量类型来定义变量。
var d time.Duration = 1000000000For Example:
package main
import (
"fmt"
"time"
)
func main() {
var d time.Duration = 1000000000
fmt.Println(d)
fmt.Println(time.Second)
fmt.Println(int64(time.Second))
}输出为
1s
1s
1000000000