- 需要导入 time 包
- time.Time 类型表示时间,time.Duration 类型表示持续时间
常用函数
1、返回当前时间:time.Now()
package main
import(
"fmt"
"time"
)
func main() {
today := time.Now()
fmt.Println("Current time: ", today) // 输出当前时间
fmt.Printf("类型为%T", today) // 输出类型为 time.Time
}
2、获取年、月、日、时、分、秒
- 方式1:time.Time 类型有对应的方法获取年、月、日、时、分、秒等信息
- 方式2:time.Time 类型的 Format 方法,传入一个格式化字符串,格式化字符串需要使用 Go 的时间 2006-01-02 15:04:05 来表示年月日时分秒
package main
import(
"fmt"
"time"
)
func main() {
// 方式1: 使用 time.Time 类型的方法获取年、月、日、时、分、秒等信息
today := time.Now()
year := today.Year() // 获取年
// month := today.Month() // 获取月,返回 time.Month 类型
month := int(today.Month()) // 获取月,这样返回的就是数字类型的月份
day := today.Day() // 获取日
hour := today.Hour() // 获取时
minute := today.Minute() // 获取分
second := today.Second() // 获取秒
fmt.Printf("当前时间:%d年%d月%d日 %d时%d分%d秒", year, month, day, hour, minute, second)
// 方式2:使用 time.Format
fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("当前年份:", time.Now().Format("2006")
fmt.Println("当前月份:", time.Now().Format("01"))
fmt.Println("当前日期:", time.Now().Format("02"))
fmt.Println("当前小时:", time.Now().Format("15"))
fmt.Println("当前分钟:", time.Now().Format("04"))
fmt.Println("当前秒数:", time.Now().Format("05"))
}
3、格式化时间
- 方式一:使用 fmt.Printf() 或者 fmt.Sprintf()
- 方式二:使用 time.Time 类型的 Format 方法,传入一个格式化字符串,格式化字符串需要使用 Go 的时间 2006-01-02 15:04:05 来表示年月日时分秒
package main
import(
"fmt"
"time"
)
func main() {
today := time.Now()
// 方式1: 使用fmt.Printf() 或者 fmt.Sprintf() 函数
datestr := fmt.Sprintf("%d-%02d-%02d %02d:%02d:%02d", today.Year(), today.Month(), today.Day(), today.Hour(), today.Minute(), today.Second())
fmt.Println("当前时间:", datestr)
fmt.Printf("当前时间:%d-02d-%02d %02d:%02d:%02d", today.Year(), today.Month(), today.Day(), today.Hour(), today.Minute(), today.Second())
// 方式2:使用 time.Format
fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
fmt.Println("当前年份:", time.Now().Format("2006"))
fmt.Println("当前月份:", time.Now().Format("01"))
fmt.Println("当前日期:", time.Now().Format("02"))
fmt.Println("当前小时:", time.Now().Format("15"))
fmt.Println("当前分钟:", time.Now().Format("04"))
fmt.Println("当前秒数:", time.Now().Format("05"))
}
4、时间常量
Go 语言在 time 包中定义了一些时间常量,表示不同的时间单位,
- time.Second 表示一秒钟
- time.Minute 表示一分钟
- time.Hour 表示一小时
- time.Millisecond 表示一毫秒
- time.Microsecond 表示一微秒
- time.Nanosecond 表示一纳秒
- 这些常量的底层类型是 time.Duration,可以用于表示持续时间。
package main
import(
"fmt"
"time"
)
func main() {
fmt.Println("一秒钟:", time.Second) // 输出 1s
fmt.Println("一分钟:", time.Minute) // 输出 1m0s
fmt.Println("一小时:", time.Hour) // 输出 1h0m0s
fmt.Println("一毫秒:", time.Millisecond) // 输出 1ms
fmt.Println("一微秒:", time.Microsecond) // 输出 1µs
fmt.Println("一纳秒:", time.Nanosecond) // 输出 1ns
}
5、time.Sleep() 函数
- time.Sleep() 函数可以让当前 goroutine 休眠指定的持续时间,参数类型是 time.Duration,可以使用上面提到的时间常量来指定休眠时间
package main
import(
"fmt"
"time"
)
func main() {
// 每一秒钟打印一次当前时间,打印五次
for i := 0; i < 5; i++ {
fmt.Println("当前时间:", time.Now().Format("2006-01-02 15:04:05"))
time.Sleep(time.Second) // 休眠一秒钟
}
// 休眠两秒钟
fmt.Println("开始休眠:", time.Now().Format("2006-01-02 15:04:05"))
time.Sleep(2 * time.Second) // 休眠两秒钟
fmt.Println("结束休眠:", time.Now().Format("2006-01-02 15:04:05"))
}
6、time 的 Unix() 和 UnixNano() 方法
- time.Time 类型的 Unix() 方法可以返回时间对应的 Unix 时间戳,单位是秒,类型是 int64
- time.Time 类型的 UnixNano() 方法可以返回时间对应的 Unix 时间戳,单位是纳秒,类型是 int64
package main
import(
"fmt"
"time"
)
func main() {
now := time.Now()
unixTimestamp := now.Unix() // 获取 Unix 时间戳,单位是秒
unixNanoTimestamp := now.UnixNano() // 获取 Unix 时间戳,单位是纳秒
fmt.Println("当前时间:", now.Format("2006-01-02 15:04:05"))
fmt.Println("Unix 时间戳(秒):", unixTimestamp)
fmt.Println("Unix 时间戳(纳秒):", unixNanoTimestamp)
// 计算循环需要的时间
start := time.Now()
sum := 0
for i := 0; i < 100000000; i++ {
sum += i
}
end := time.Now()
duration := end.Sub(start) // 计算持续时间,类型是 time.Duration
fmt.Println("循环耗时:", duration)
}