Go标准库time的使用
time包提供了时间的显示和测量用的函数。日历的计算采用的是公历。
time.Now()
这个是一个包函数:用于获取当前时间Time结构的接口。如下:
package main
import (
"fmt"
"time"
)
func main() {
now := time.Now()
year := now.Year()
month := now.Month()
day := now.Day()
hour := now.Hour()
minute := now.Minute()
sec := now.Second()
fmt.Println(now)
fmt.Println(year)
fmt.Println(month)
fmt.Println(day)
fmt.Println(hour)
fmt.Println(minute)
fmt.Println(sec)
}
time.Unix(sec int64, nsec int64) Time
包函数:将时间戳转换为时间Time结构。
//timestamp时间戳
time := time.Unix(timestamp,0)
fmt.Println(time)
Time.Unix()
Time结构的方法:获取Unix时间戳。
now := time.Now()
unix := now.Unix() //unix时间戳秒
unixnano := now.UnixNano() //unix时间戳纳秒
fmt.Print("unix=",unix," unixnano=",unixnano)
func (t Time) Add(d Duration) Time
Time的方法:Add返回时间点t+d。
func main() {
now := time.Now()
later := now.Add(time.Hour) // 当前时间加1小时后的时间
fmt.Println(later)
}
type Timer
定时器:多少时间后触发一次。
//定时器功能实现
timer := time.NewTimer(time.Second * 2)
go func() {
//开启新的协程在协程中阻塞,不影响主协程
<-timer.C //阻塞等待两秒后读取管道
fmt.Println("hello") //定时后执行的时间
}()
fmt.Println("world")
type Ticker
定时器:经过多少时间后触发,循环触发。
//循环定时器功能实现
ticker := time.NewTicker(time.Second)
count := 0
go func() {
for _ = range ticker.C { //阻塞子协程一秒,然后执行后面逻辑
fmt.Println("count:", count)
count++
}
}()
fmt.Println("ticker begin")
time.Sleep(time.Second * 5)