博客再次改版了,这次在细节方面做了一些调整。
时间处理 - golang入门教程
时间:2020-05-13 02:36:20 +0800 CST 浏览:305

摘要

golang time模块常用的时间处理方法
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)
}

时间类型转字符串: Format函数

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)
}

时间类型转时间戳: Unix函数

func getCurTimeStamp() {    // 时间戳,精确到秒
    timestamp := time.Now().Unix()  // 时间戳,精确到纳秒
    timestampNano := time.Now().UnixNano()
    fmt.Println(timestamp, timestampNano)
}

时间戳转时间类型:Unix函数

func timestamp2Time() { timestamp := time.Now().Unix()
    localTimeObj := time.Unix(timestamp, 0)
    fmt.Println(localTimeObj)
}

时间字符串转时间类型:parse函数

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)
    }
}

时间加减

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)
}

周期任务:每隔5秒

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)
}

定时任务,每天10:00:00触发

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)
}


如果这篇文章对你有所帮助,可以通过下边的“打赏”功能进行小额的打赏。

本网站部分内容来源于互联网,如有侵犯版权请来信告知,我们将立即处理。


来说两句吧