时间类型
time.Time类型表示时间。我们可以通过time.Now()函数获取当前的时间对象,然后获取时间对象的年月日时分秒等信息。
func main() {
now := time.Now()
fmt.Println(now)
fmt.Println(now.Year())
fmt.Println(now.Month())
fmt.Println(now.Day())
fmt.Println(now.Hour())
fmt.Println(now.Minute())
fmt.Println(now.Second())
fmt.Printf("%#v\n",now)
//时间戳
fmt.Println(now.Unix())
tm := now.Unix()
timestamp2Timeobj(tm)
//定时器
tickTest01()
}
时间戳
时间戳是自1970年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间(UnixTimestamp)。
func timestampDemo() {
now := time.Now() //获取当前时间
timestamp1 := now.Unix() //时间戳
timestamp2 := now.UnixNano() //纳秒时间戳
fmt.Printf("current timestamp1:%v\n", timestamp1)
fmt.Printf("current timestamp2:%v\n", timestamp2)
}
定时器
使用time.Tick(时间间隔)来设置定时器,定时器的本质上是一个通道(channel)。
func timestamp2Timeobj(timestamp int64) {
time1 := time.Unix(timestamp,0)
year := time1.Year()
month := time1.Month()
day := time1.Day()
hour := time1.Hour()
minute := time1.Minute()
second := time1.Second()
fmt.Printf("%04d-%02d-%02d %02d:%02d:%02d\n",year,month,day,hour,minute,second)
}
//定时器
func tickTest01() {
ticker := time.Tick(time.Second)
for range ticker {
timestamp2Timeobj(time.Now().Unix()) //每秒执行的任务
}
}
时间格式化
时间类型有一个自带的方法Format进行格式化,需要注意的是Go语言中格式化时间模板不是常见的Y-m-d H:M:S而是使用2006年1月2号15点04分(记忆口诀为2006 1 2 3 4)。
//yyyy-m-d 其他语言
//2006-01-02 15:04:05 go
func formattest01() {
now := time.Now()
fmt.Println(now.Format("2006-01-02 15:04:05"))
fmt.Println(now.Format("2006/01/02 15:04:05"))
fmt.Println(now.Format("15:04 2006/01/02"))
fmt.Println(now.Format("2006/01/02"))
}
time.Since
time.Since用于评估与实际时间的差异,内部调用了Sub函数,Since返回从t开始经过的时间
start := time.Now() // 获取当前时间
sum := 0
for i := 0; i <10; i++ {
sum += 1
}
end := time.Since(start)
fmt.Printf("耗费了%s",end)
耗费了12.5447ms
time.Sleep
go中time.Sleep 不能传入数字来实现延时,而是传入 time.Duration
睡眠1小时10分5秒:
time.Sleep(1*time.Hour + 10*time.Minute + 5*time.Second)