Golang time标准库
时间:2025-1-10 22:05 作者:杨佳乐 分类: Golang
package main
import (
"fmt"
"time"
)
func main(){
// time 是 Go 标准库中一个非常重要的包,用于处理时间相关的操作,如获取当前时间、格式化时间、计算时间间隔、创建定时器等
// 核心类型
// time.Time 表示一个时间点,是time包中最核心的类型
//常用方法
// time.Now():获取当前时间。
// t.Year() / t.Month() / t.Day():获取年、月、日。
// t.Hour() / t.Minute() / t.Second():获取时、分、秒。
// t.Format(layout string):格式化时间。
now := time.Now()
fmt.Println("当前时间",now)
// 获取具体的时间部分
fmt.Printf("年:%d,月:%d,日:%d",now.Year(),now.Month(),now.Day())
fmt.Printf("时:%d,分:%d,秒:%d",now.Hour(),now.Minute(),now.Second())
fmt.Println("格式化时间:",now.Format("2006-01-02 15:04:05"))
// time.Duration 表示两个时间点之间的时间间隔,单位是纳秒
// 常用方法:
// 表示间隔:time.Second, time.Minute, time.Hour 等。
// 运算:可以用加减法计算时间间隔。
// time.Sleep(duration):让程序暂停指定时间。
duration := 2 * time.Second
fmt.Println("等待时间:", duration)
// 程序暂停
time.Sleep(duration)
fmt.Println("等待结束")
// time.Ticker 和 time.Timer
//time.Ticker
//time.Ticker 是一个定时器,用于在固定的时间间隔重复执行操作。
ticker := time.NewTicker(1 * time.Second)
defer ticker.Stop()
for i := 0; i < 3; i++ {
<-ticker.C
fmt.Println("执行一次:", time.Now())
}
//time.Timer
//time.Timer 是一个单次触发的定时器
timer := time.NewTimer(2 * time.Second)
fmt.Println("计时开始:", time.Now())
<-timer.C
fmt.Println("计时结束:", time.Now())
// 时间计算
//时间间隔
//可以通过 time.Sub 方法计算两个时间点之间的间隔
start := time.Now()
time.Sleep(2 * time.Second)
end := time.Now()
duration2 := end.Sub(start)
fmt.Println("间隔时间:", duration2)
//时间加减
//通过 Add 或 AddDate 方法可以对时间进行加减
newNow := time.Now();
fmt.Println("当前时间:",newNow)
// 加 6 小时
later := newNow.Add(6 * time.Hour)
fmt.Println("加 6 小时:", later)
// 减 1 天
earlier := newNow.AddDate(0, 0, -1)
fmt.Println("减 1 天:", earlier)
// 时间格式化与解析
//时间格式化
// 通过 time.Format 方法可以将时间转换为字符串。
// 格式说明:
// 年:2006
// 月:01
// 日:02
// 时:15(24小时制) / 03(12小时制)
// 分:04
// 秒:05
// AM/PM:PM
// 常见格式
fmt.Println("默认格式:", now.Format(time.RFC3339))
fmt.Println("自定义格式:", now.Format("2006-01-02 15:04:05"))
fmt.Println("12 小时制:", now.Format("2006-01-02 03:04:05 PM"))
// 时间解析
//通过 time.Parse 方法将字符串转换为时间对象
layout := "2006-01-02 15:04:05"
str := "2025-01-10 14:30:00"
parsedTime, err := time.Parse(layout, str)
if err != nil {
fmt.Println("解析失败:", err)
return
}
fmt.Println("解析时间:", parsedTime)
// 其他常用方法
//判断时间是否在某区间
start = time.Now()
time.Sleep(1 * time.Second)
end = time.Now()
fmt.Println("是否在区间内:", start.Before(end))
//获取时间戳
// 秒级时间戳
fmt.Println("秒级时间戳:", now.Unix())
// 纳秒级时间戳
fmt.Println("纳秒级时间戳:", now.UnixNano())
//常量
// time 包定义了一些常用时间单位的常量:
// time.Second:1 秒
// time.Minute:1 分钟
// time.Hour:1 小时
// time.Microsecond:1 微秒
// time.Millisecond:1 毫秒
fmt.Println(time.Hour) // 1h0m0s
// 总结
// time 包是处理时间的强大工具。学习 time 包时,可以按以下步骤逐步深入:
// 获取当前时间:time.Now()
// 格式化与解析:time.Format 和 time.Parse
// 时间计算:加减操作、间隔计算
// 定时与延迟:time.Sleep, time.Ticker, time.Timer
// 高级功能:如时区转换、时间戳等
}
标签: Golang标准库