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 时间到了,被停止了")
	}
}