time包
获取当前时间
t1 := time.Now()
得到的是时间类型 time.Time
获取当前时间的年月日时分秒信息
fmt.Println(t1.Year())
fmt.Println(t1.Month())
fmt.Println(t1.Day())
fmt.Println(t1.Hour())
fmt.Println(t1.Minute())
fmt.Println(t1.Second())
指定时间获取
t2 := time.Date(2022,10,9,15,30,30,0, time.Local) // time.Local 本地时区
fmt.Println(t2)
时间戳
fmt.Println(t1.Unix()) // 秒级
fmt.Println(t1.UnixNano()) // 纳秒级
时间计算
//加时分秒
fmt.Println(t1.Add(time.Hour * 3)) //加3h
fmt.Println(t1.Add(time.Minute * 3)) //加3m
fmt.Println(t1.Add(time.Second * 3)) //加3s
//加年月日
fmt.Println(t1.AddDate(1,2,5)) //加1年2月5天
时间类型 转成 string
//1.年月日时分秒
t3 := t1.Format("2006年1月2日 15:04:05") // 2006年1月2日 15:04:05 是固定写法
fmt.Println(t3) // 2022年10月9日 15:46:35
//2.年月日
//t4 := t1.Format("2006年1月2日") // 2022年10月9日
t4 := t1.Format("2006/1/2") // 2022/10/9
//t4 := t1.Format("2006-1-2") // 2022-10-9
fmt.Println(t4)
//3.时分秒
t5 := t1.Format("15:04:05") // 15:53:05
//t5 := t1.Format("15/04/05")
//t5 := t1.Format("15-04-05")
fmt.Println(t5)
string 转成 时间类型
var s string = "2022年9月30日 10:22:16"
//1.年月日时分秒
t6, err := time.Parse("2006年1月2日 15:04:05",s)
if err != nil{
fmt.Println(err)
}else {
fmt.Println(t6) // 2022-09-30 10:22:16 +0000 UTC
}
//2.年月日
s = "2022年9月30日"
t6, err = time.Parse("2006年1月2日",s)
if err != nil{
fmt.Println(err)
}else {
fmt.Println(t6) // 2022-09-30 00:00:00 +0000 UTC
}
//3.时分秒
s = "10:22:16"
t6, err = time.Parse("15:04:05",s)
if err != nil{
fmt.Println(err)
}else {
fmt.Println(t6) // 0000-01-01 10:22:16 +0000 UTC
}
计时器
time.NewTimer
func main() {
//创建一个定时3秒的定时器
timer := time.NewTimer(3*time.Second)
fmt.Println(time.Now()) //2022-10-20 21:03:28.9053341 +0800 CST m=+0.003990501
//此处会定时阻塞3秒后向channel通道中发送3秒后的时间
ch := timer.C
fmt.Println(<-ch) //2022-10-20 21:03:31.9053473 +0800 CST m=+3.004003701
}
time.After
func main() {
ch := time.After(3*time.Second) //本质:time.NewTimer(d).C
fmt.Printf("%T \n", ch) // <-chan time.Time
fmt.Println(time.Now()) //2022-10-20 21:15:31.7123832 +0800 CST m=+0.004985701
fmt.Println(<-ch) //2022-10-20 21:15:34.7133605 +0800 CST m=+3.005963001
}
关闭定时器
func main() {
timer := time.NewTimer(5*time.Second)
go func() {
fmt.Println("goroutine 开始....")
ch := timer.C
<- ch
fmt.Println("goroutine 结束....")
}()
time.Sleep(3*time.Second)
flag := timer.Stop() // 结束定时器
if flag{
fmt.Println("timer 时间到了,被停止了")
}
}