目录
time 包方法总结
类型 time.Time 的方法
库函数
代码示例:
time
包方法总结
类型 time.Time
的方法
方法名 |
描述 |
示例 ẵ |
Now() |
获取当前时间和日期 |
time.Now() |
Format() |
格式化时间为字符串 |
time.Now().Format("2006-01-02 15:04:05") |
Add() |
增加指定时间 |
time.Now().Add(2 * time.Hour) |
Hour() |
获取小时部分 |
time.Now().Hour() |
Date() |
获取年、月、日部分 |
time.Now().Date() |
Before() |
判断当前时间是否在指定时间之前 |
time.Now().Before(time.Now()) |
AddDate() |
增加年、月、日 |
time.Now().AddDate(1, 2, 3) |
Clock() |
获取小时、分钟、秒部分 |
time.Now().Clock() |
After() |
判断当前时间是否在指定时间之后 |
time.Now().After(time.Now().Add(-1 * time.Hour)) |
Compare() |
比较时间,返回-1(当前时间小于指定时间)、0(相等)、1(当前时间大于指定时间) |
time.Now().Compare(time.Now().Add(-1 * time.Hour)) |
Equal() |
判断两个时间是否相等 |
time.Now().Equal(time.Now()) |
Weekday() |
获取星期几 |
time.Now().Weekday() |
Truncate() |
截断时间到最接近但不超过的倍数时间 |
time.Now().Truncate(24 * time.Hour) |
In() |
转换为指定时区 |
time.Now().In(time.UTC) |
String() |
返回时间字符串 |
time.Now().String() |
库函数
方法名 |
描述 |
示例 ẵ |
Parse() |
解析字符串为时间 |
time.Parse("2006/01/02", "2022/05/19") |
Add() |
增加指定时间 |
future := time.Now().Add(2 * time.Second) |
Sub() |
计算时间差 |
diff := future.Sub(time.Now()) |
Sleep() |
阻塞当前 goroutine 一段时间 |
time.Sleep(2 * time.Second) |
AfterFunc() |
在指定时间后执行函数 |
time.AfterFunc(diff, func() { ... }) |
NewTimer() |
创建一个计时器 |
timer := time.NewTimer(5 * time.Second) |
Stop() |
停止计时器 |
timer.Stop() |
Since() |
计算从某个时间到现在的时间差 |
time.Since(start) |
Date() |
创建一个新的时间 |
time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC) |
After() |
返回一个在指定时间后的通道 |
time.After(2 * time.Hour) |
代码示例:
package main
import (
"fmt"
"time"
)
func main() {
// 当前时间
fmt.Println(time.Now())
// 格式化,string
fmt.Println(time.Now().Format("2006-01-02 15:04:05"))
fmt.Println(time.Now().Format("2006.01.02 15:04:05.000"))
fmt.Println(time.Now().Format("2006/01/02 15/04/05"))
// --------------------------类型time.
fmt.Println("--------------------")
fmt.Println(time.Now().Add(2 * time.Hour))
fmt.Println(time.Now().Hour())
fmt.Println(time.Now().Date()) // year int, month Month, day int
fmt.Println(time.Now().Before(time.Now()))
fmt.Println(time.Now().AddDate(1, 2, 3))
fmt.Println(time.Now().Clock()) // hour int, min int, sec int
fmt.Println(time.Now().After(time.Now().Add(-1 * time.Hour))) // true
fmt.Println(time.Now().Compare(time.Now().Add(-1 * time.Hour))) // 调用者小于t返回-1,等于返回0,大于返回1。
fmt.Println(time.Now().Equal(time.Now()))
fmt.Println(time.Now().Weekday())
fmt.Println(time.Now().Truncate(24 * time.Hour)) //截断到最接近但不超过原始时间的d的倍数。截断到最近的一天开始时刻
fmt.Println(time.Now().In(time.UTC)) // 转换为UTC时区
fmt.Println(time.Now().String())
// ----------------------------库time.
fmt.Println("--------------------")
// 解析
parseTime, _ := time.Parse("2006/01/02", "2022/05/19")
fmt.Println(parseTime) // 2022-05-19 00:00:00 +0000 UTC
// 运算
future := time.Now().Add(2 * time.Second)
fmt.Println(future)
diff := future.Sub(time.Now())
fmt.Println(diff)
// 延时、定时
var start = time.Now()
time.Sleep(2 * time.Second)
time.AfterFunc(diff, func() {
fmt.Println("时间到")
})
// timer
timer := time.NewTimer(5 * time.Second)
fmt.Println("开始等待")
<-timer.C // 经过指定的时间间隔后发送当前时间到它的通道(C);阻塞直到计时器到期
//time.Timer 对象包含一个名为 C 的通道(channel),其类型为 <-chan Time。这个通道用于接收计时器到期的通知。
//具体来说,当你创建了一个 time.Timer 并设置了一定的持续时间后,这个定时器会在设定的时间间隔后通过它的 C 通道发送当前的时间信息。
fmt.Println("5秒过去了")
// 等价于time.After(5 * time.Second)
timer = time.NewTimer(5 * time.Second)
stopped := timer.Stop() //如果计时器已经在通道上发送了值,则 Stop 不会有任何效果。
if stopped {
fmt.Println("计时器已成功停止")
} else {
fmt.Println("计时器未能停止")
}
// 注意:这里需要防止goroutine泄露,实际应用中应谨慎处理
select {
case <-timer.C:
// 如果计时器到期,这里会被触发
default:
// 如果计时器被成功停止,这里什么都不会发生
}
// 其他
fmt.Println(time.Since(start))
// 输出: 2025-03-29 20:38:00 +0000 UTC
fmt.Println(time.Date(2025, time.March, 29, 20, 38, 0, 0, time.UTC))
fmt.Println(time.After(2 * time.Hour)) // 打印通道本身,而非时间点
}