常用数据类型
Time:时间,以纳秒精度表示时间中的一个瞬间。
Duration:持续时间以int64纳秒计数表示两个瞬间之间经过的时间。
Ticker:一个channel,该channel每隔一段时间发送当前时间。
Time 表示时间,可以以多种形式返回这个时间的具体信息
1 now := time.Now() // time.Time
返回不同时间不同格式
1 2 3 4 5 6 7 fmt.Println(now.Second()) // 返回秒 fmt.Println(now.Day()) // 返回天 fmt.Println(now.Clock()) // 返回 "小时 分钟 秒" 时钟 fmt.Println(now.Date()) // 返回 "年 月 日"日期 fmt.Println(now.Weekday()) // 返回周几 fmt.Println(now.Format("Mon Jan 2 15:04:05 MST 2006")) // 按照这个格式返回,注意,这里必须按照1月2号下午3点4分5秒2006年的格式填写 fmt.Println(time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)) // 返回这个时间节点的time格式时间
时间解析
1 2 3 4 t1 := "2022-07-21 15:09:36.874858" t2 := "2006-01-02 15:04:05" parse1, err := time.Parse(t2, t1) // 将t1时间按照t2格式展示 parse2, _ := time.ParseInLocation(t2, t1, time.Local) // 将t1时间按照t2格式展示,并且指定市区为local
对时间操作
1 2 3 4 5 6 7 8 9 10 fmt.Println(time.Now().Unix()) // 返回时间戳 time.Now().Nanosecond() 纳秒时间戳 time.Unix(timestamp, 0).Local() // 时间戳转换为时间,时区为当地时间 // 统计时间间隔 start := time.Now() //...func fmt.Println(time.Since(start)) start.Add(time.Hour * 1) // 返回一小时之后的时间
判断时间顺序
1 now.After(after) // 返回now的时间点是否比after后
Dutation 两个时间的间隔,可以用于计算两个时间的差,或者在sleep中常用
1 2 3 4 t1 := time.Now() // t2 := time.Now() fmt.Println(t2.Sub(t1))
sleep需要传入duration
1 time.Sleep(time.Duration(1) * time.Second)
Ticker 定时器和倒计时,通过一个channel实现定时和倒计时的功能。
1 2 3 4 5 6 7 8 9 10 11 tick := time.Tick(time.Second) after := time.After(5 * time.Second) for { select { case c := <-tick: fmt.Printf("tick clock: %v\n", c) case d := <-after: fmt.Printf("time up: %v\n", d) return } }
输出
1 2 3 4 5 6 tick clock: 2022-07-26 16:43:38.303502 +0800 CST m=+1.000336793 tick clock: 2022-07-26 16:43:39.304435 +0800 CST m=+2.001268376 tick clock: 2022-07-26 16:43:40.303358 +0800 CST m=+3.000189376 tick clock: 2022-07-26 16:43:41.303761 +0800 CST m=+4.000590835 tick clock: 2022-07-26 16:43:42.303389 +0800 CST m=+5.000217585 time up: 2022-07-26 16:43:42.303396 +0800 CST m=+5.000223668