日期函数
Time 包
时间和日期是我们变成中经常使用到的,在golang中time包提供了时间的显示和测量相关函数方法
格式化时间
时间类型有一个自带的方法 Format 进行格式化
需要注意的是 Golang中格式化时间不是长久的 Y-m-d H:M:S
而是使用 Golang 的诞生时间 2006年1月2日 15点04分 (记忆口诀 2006 1 2 3 4 )
获取当前时间戳
时间戳是自1070年1月1日(08:00:00GMT)至当前时间的总毫秒数。它也被称为Unix时间戳
//获取当前时间戳
now := time.Now()
//获取毫秒时间戳
unixNow := now.Unix()
//获取纳秒时间戳
nanoNow := now.UnixNano()
时间戳转日期字符
通过将时间戳我们可以转换成日期字符串
//通过将时间戳我们可以转换成日期字符串
var timeObj4 = time.Unix(1602815686, 0)
format1 := timeObj4.Format("2006-01-02 15:04:05")
fmt.Println(format1) // 2020-10-16 10:34:46
format2 := now.Format("2006-01-02 15:04:05")
fmt.Println(format2) // 2020-10-16 10:40:04
时间间隔
time.Duration是time包定义的一个类型,它代表两个时间点之间经过的时间,以纳秒为单位。time.Duration表示一段时间间隔,可表示的最大长度段大约290年。
time包中定义的时间间隔类型的常量如下:
var waitFiveHundredMillisections time.Duration = 500 * time.Millisecond
startingTime := time.Now().UTC()
time.Sleep(600 * time.Millisecond)
endingTime := time.Now().UTC()
var duration time.Duration = endingTime.Sub(startingTime)
if duration >= waitFiveHundredMillisections {
fmt.Printf("Wait %v\nNative [%v]\nMilliseconds [%d]\nSeconds [%.3f]\n", waitFiveHundredMillisections, duration, duration.Nanoseconds()/1e6, duration.Seconds())
}
时间操作函数
// 时间相加
now2 := time.Now()
// 当前时间加1个小时后
later := now2.Add(time.Hour)
fmt.Println(later)
定时器
package main
import (
"fmt"
"time"
)
func main() {
//方式1:使用time.NewTicker(时间间隔)来设置定时器
ticker := time.NewTicker(time.Second)
n := 0
for i := range ticker.C {
fmt.Println(i)
n++
if n>5 {
// 终止定时器
ticker.Stop()
goto label
}
}
label:
//方式2:time.Sleep(time.Second)来实现定时器
for {
time.Sleep(time.Second)
fmt.Println("一秒后")
}
}