import time
func getCurTime() {
// 本地時間(若是是在中國,獲取的是東八區時間)
curLocalTime := time.Now()
// UTC時間
curUTCTime := time.Now().UTC()
fmt.Println(curLocalTime, curUTCTime)
}
複製代碼
func setTimeZone() {
curLocalTime := time.Now()
curUtcTime := curLocalTime.In(time.UTC)
fmt.Println(curUtcTime)
}
複製代碼
func time2TimeStr() {
localTimeStr := time.Now().Format("2006-01-02 15:04:05")
// UTC時間
utcTimeStr := time.Now().UTC().Format("2006-01-02 15:04:05")
fmt.Println(localTimeStr, utcTimeStr)
}
複製代碼
func getCurTimeStamp() {
// 時間戳,精確到秒
timestamp := time.Now().Unix()
// 時間戳,精確到納秒
timestampNano := time.Now().UnixNano()
fmt.Println(timestamp, timestampNano)
}
複製代碼
func timestamp2Time() {
timestamp := time.Now().Unix()
localTimeObj := time.Unix(timestamp, 0)
fmt.Println(localTimeObj)
}
複製代碼
func timeStr2Time() {
timeStr := "2020-01-13 22:32:17"
// 返回的是UTC時間 2020-01-13 22:32:17 +0000 UTC
utcTimeObj, err := time.Parse("2006-01-02 15:04:05", timeStr)
if err == nil {
fmt.Println(utcTimeObj, utcTimeObj.Unix())
}
// 返回的是當地時間 2020-01-13 22:32:17 +0800 CST
localTimeObj, err := time.ParseInLocation("2006-01-02 15:04:05", timeStr, time.Local)
if err == nil {
fmt.Println(localTimeObj)
}
}
複製代碼
parse函數 + Unix函數函數
Unix函數 + Format函數spa
注:(轉換爲Time類型比較容易作加減)線程
func addTime() {
curTime := time.Now()
// 加1秒
addSecondTime := curTime.Add(time.Second * 1)
// 加1分鐘
addMinuteTime := curTime.Add(time.Minute * 1)
addMinuteTime2 := curTime.Add(time.Second * time.Duration(60*1))
fmt.Println(addSecondTime, addMinuteTime, addMinuteTime2)
}
複製代碼
注:這部分摘抄自想入飛飛的《Golang週期任務、定時任務》: www.jianshu.com/p/4955e5d65…code
func intervalTask() {
ticker := time.NewTicker(time.Second * 5)
go func() {
for _ = range ticker.C {
fmt.Println("do the thing")
}
}()
time.Sleep(time.Minute)
}
複製代碼
func countDownSyncTask() {
timer1 := time.NewTimer(time.Second * 5)
<-timer1.C
fmt.Println("do the thing")
}
複製代碼
func countDownAsyncTask() {
timer1 := time.NewTimer(time.Second * 3)
go func() {
//等觸發時的信號
<-timer1.C
fmt.Println("do the thing")
}()
//因爲上面的等待信號是在新線程中,因此代碼會繼續往下執行,停掉計時器
time.Sleep(time.Second * 10)
}
複製代碼
func scheduleTask() {
go func() {
for {
fmt.Println("觸發的事件")
now := time.Now()
// 計算下一個零點
next := now.Add(time.Hour * 24)
next = time.Date(next.Year(), next.Month(), next.Day(), 10, 0, 0, 0, next.Location())
fmt.Println(next.Sub(now))
t := time.NewTimer(next.Sub(now))
<-t.C
}
}()
time.Sleep(time.Hour * 24)
}
複製代碼