Go語言中時間函數及定時器的使用

來源:互聯網
上載者:User

標籤:Go語言時間函數   Go語言定時器   

Go語言中時間函數及定時器、休眠等功能的實現和使用,代碼如下,有需要的小夥伴直接拿去

package mainimport (    "time"    "fmt")func main() {    // 設定時區,如果name是""或"UTC",返回UTC;    // 如果name是"Local",返回Local;    // 否則name應該是IANA時區資料庫裡有記錄的地點名(該資料庫記錄了地點和對應的時區),如"America/New_York"。    location,err := time.LoadLocation("America/New_York")    if err != nil {        panic(err)    }    // 建立時間,依次是:年、月、日、時、分、秒、納秒(1秒=1000毫秒=1000000微秒=1000000000納秒)、時區    t1 := time.Date(2018, 7, 7, 12, 12, 12, 500000000, location)    fmt.Println(t1)  // 2018-07-07 12:12:12.5 -0400 EDT    // 將字串轉成時間,時間格式字串:"2006-01-02 15:04:05"(Go語言規定)    t2,err := time.Parse("2006-01-02 15:04:05", "2018-07-07 09:10:05")    fmt.Println(t2) // 2018-07-07 09:10:05 +0000 UTC    // 將字串轉成時間,需要傳入時區    t3,err := time.ParseInLocation("20060102", "20180707", time.UTC)    fmt.Println(t3) // 2018-07-07 00:00:00 +0000 UTC    // 擷取目前時間    t4 := time.Now()    fmt.Println(t4) // 2018-05-23 20:50:08.9873106 +0800 CST m=+0.012895501    // 格式化輸出    fmt.Println(t4.Format("2006-01-02 15:04:05")) // 2018-05-23 20:50:08    fmt.Println(t4.Format("02/01/2006 15:04:05")) // 23/05/2018 20:50:08    fmt.Println(t4.Format("2006-01-02"))           // 2018-05-23    fmt.Println(t4.Format("15:04:05"))             // 20:50:08    fmt.Println(t4.Format("January 2,2006"))      // May 23,2018    // 擷取世界統一時間    t5 := t4.UTC()    fmt.Println(t5) // 2018-05-23 12:50:08.9873106 +0000 UTC    // 擷取本地時間    t6 := t5.Local()    fmt.Println(t6) // 2018-05-23 20:50:08.9873106 +0800 CST    // 擷取指定時區的時間    t7 := t6.In(location)    fmt.Println(t7) // 2018-05-23 08:50:08.9873106 -0400 EDT    // 擷取Unix時間戳記,單位:秒,即從時間點1970-01-01 00:00:00 UTC到時間點t所經過的時間    timestamp := t7.Unix()    fmt.Println(timestamp) // 1527080185    // 擷取Unix時間戳記,單位:納秒,常用於作為rand的隨機數種子    timestamp = t7.UnixNano()    fmt.Println(timestamp) // 1527080185738346000    // 判斷兩個時間是否相等,會判斷時區等資訊,不同時區也可以用此進行比較    fmt.Println(t7.Equal(t6)) // true    // 判斷t4是否在t3之前    fmt.Println(t4.Before(t3)) // true    // 判斷t4是否在t3之後    fmt.Println(t4.After(t3))  // false    // 返回時間的年、月、日    y,m,d := t4.Date()    fmt.Printf("年:%d,月:%d,日:%d\n", y, m, d) // 年:2018,月:5,日:23    // 返回時間的時、分、秒    h,minute,s := t4.Clock()    fmt.Printf("時:%d,分:%d,秒:%d\n", h, minute, s) // 時:21,分:5,秒:41    // 單獨擷取年、月、日、時、分、秒、星期    fmt.Printf("年:%d,月:%d,日:%d,時:%d,分:%d,秒:%d,星期:%d\n", t4.Year(), t4.Month(), t4.Day(), t4.Hour(), t4.Minute(), t4.Second(), t4.Weekday()) // 年:2018,月:5,日:23,時:21,分:9,秒:56,星期:3    t8,err := time.Parse("2006-01-02 15:04:05", "2018-01-01 00:00:00")    // 增加100秒,time.Duration是以納秒為單位,time.Second=1000 000 000。參數可以為負數就是減少    t9 := t8.Add(time.Duration(100) * time.Second)    fmt.Println(t9) // 2018-01-01 00:01:40 +0000 UTC    // 增加或減少年、月、日    t10 := t8.AddDate(1, 1, -1)    fmt.Println(t10) // 2019-01-31 00:00:00 +0000 UTC    // 計算兩個時間之間的差    dur := t8.Sub(t9)    fmt.Println(dur.Seconds()) // -100    //=======================================================================定時器、休眠等    // Timer,單次時間事件,指定時間後向通道C發送當時時間    timer := time.NewTimer(time.Duration(1) * time.Second)    fmt.Println(<- timer.C)    // 也可配合select使用    timer = time.NewTimer(time.Duration(1) * time.Second)    select {    case <- timer.C :        fmt.Println("執行...")    }     // 用Timer實現定時器    timer = time.NewTimer(time.Duration(1) * time.Second)    for {        select {        case <- timer.C :            fmt.Println("Timer定時器...")            timer.Reset(time.Duration(1) * time.Second) // 重新開始計時        }    }    // 開啟一個新協程,在指定時間後執行給定函數,所以測試時,需要將主協程休眠幾秒才能看到執行結果    time.AfterFunc(time.Duration(1) * time.Second, func() {        fmt.Println("AfterFunc...")    })    // 當前協程休眠指定時間    time.Sleep(2 * time.Second)    // 指定時間後向通道C發送當時時間    tt := <- time.After(time.Duration(1) * time.Second)    fmt.Println(tt)    // Ticker保管一個通道,並每隔一段時間向其傳遞"tick"。    ticker := time.NewTicker(time.Duration(1) * time.Second)    // 用Ticker實現定時器    for {        select {        case <-ticker.C:            fmt.Println("Ticker...")        }    }}

Go語言中時間函數及定時器的使用

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.