欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go時間操作常用方法(推薦!)

 更新時間:2023年06月25日 11:30:07   作者:natsuiroginga  
平時開發(fā)過程中,時間相關(guān)的操作用的還是很多的,下面這篇文章主要給大家介紹了關(guān)于Go時間操作常用方法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1. time 包

1.1. 時間類型

Go 語言中時間類型有兩種:

  • time.Time:表示時間的類型,常見的有兩種方式:
    • time.Now():獲取當(dāng)前的時間
    • time.Date():根據(jù)指定的年、月、日、時、分、秒、納秒等創(chuàng)建時間
  • time.Duration:表示兩個時間點(diǎn)之間經(jīng)過的時間,以納秒為單位

1.2. 時間戳

時間戳是自 1970 年 1 月 1 日(08:00:00GMT)至當(dāng)前時間的總毫秒數(shù)。它也被稱為 Unix 時間戳(UnixTimestamp)。

1.3. 時間間隔

time.Duration 是 time 包定義的一個類型,它代表兩個時間點(diǎn)之間經(jīng)過的時間,以納秒為單位。time.Duration 表示一段時間間隔,可表示的最長時間段大約 290 年。

1.4. 時間操作

Go 語言中時間操作主要有兩種:

  • 獲取時間:time.Now()、time.Date()
  • 格式化時間:time.Format()、time.Parse()

2. 獲取時間

2.1. 獲取當(dāng)前時間

Go 語言中通過 time.Now()函數(shù)獲取當(dāng)前時間,返回一個 time.Time 類型的本地時間。

func Now() Time
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now() // 獲取當(dāng)前時間
    fmt.Printf("current time:%v\n", now)
}

2.2. 獲取指定時間

time.Date()函數(shù)可以獲取指定的時間,其參數(shù)分別是:年、月、日、時、分、秒、納秒、時區(qū)。

func Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time
package main

import (
    "fmt"
    "time"
)

func main() {
    // 獲取指定時間
    date := time.Date(2020, 1, 1, 0, 0, 0, 0, time.Local)
    fmt.Printf("date:%v\n", date)
}

3. 格式化時間

3.1. 時間類型轉(zhuǎn)字符串

Go 語言中可以通過 time.Time 類型的 Format()函數(shù)對時間進(jìn)行格式化,該函數(shù)的第一個參數(shù)是格式化的模板,模板里面的時間必須是 2006-01-02 15:04:05 這個時間,這個時間是固定的,不然就會出錯,第二個參數(shù)是要格式化的時間。

func (t Time) Format(layout string) string
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now() // 獲取當(dāng)前時間
    // 格式化的模板為Go的出生時間2006年1月2號15點(diǎn)04分 Mon Jan
    fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
    fmt.Println(now.Format("2006/01/02 15:04"))
    fmt.Println(now.Format("15:04 2006/01/02"))
}

3.2. 字符串轉(zhuǎn)時間類型

Go 語言中可以通過 time.Parse()函數(shù)對字符串進(jìn)行解析,生成對應(yīng)的 time.Time 類型的時間。

func Parse(layout, value string) (Time, error)
package main

import (
    "fmt"
    "time"
)

func main() {
    // 加載時區(qū)
    loc, _ := time.LoadLocation("Asia/Shanghai")
    // 按照指定時區(qū)和指定格式解析字符串時間
    timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/01/01 00:00:00", loc)
    if err != nil {
        fmt.Printf("parse time failed, err:%v\n", err)
        return
    }
    fmt.Println(timeObj)
}

4. 時間常量

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)

5. 時間操作

5.1. 獲取時間戳

時間戳是自 1970 年 1 月 1 日(08:00:00GMT)至當(dāng)前時間的總毫秒數(shù)。它也被稱為 Unix 時間戳(UnixTimestamp)。

func (t Time) Unix() int64
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    timestamp1 := now.Unix()     // 時間戳
    timestamp2 := now.UnixNano() // 納秒時間戳
    fmt.Printf("current timestamp1:%v\n", timestamp1)
    fmt.Printf("current timestamp2:%v\n", timestamp2)
}

5.2. 時間間隔

time.Duration 是 time 包定義的一個類型,它代表兩個時間點(diǎn)之間經(jīng)過的時間,以納秒為單位。time.Duration 表示一段時間間隔,可表示的最長時間段大約 290 年。

const (
    Nanosecond  Duration = 1
    Microsecond          = 1000 * Nanosecond
    Millisecond          = 1000 * Microsecond
    Second               = 1000 * Millisecond
    Minute               = 60 * Second
    Hour                 = 60 * Minute
)
package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    // 程序執(zhí)行到這里會暫停2秒
    time.Sleep(2 * time.Second)
    fmt.Println("2 seconds later")
    // 兩個時間相減
    fmt.Printf("passed %v\n", time.Since(now))
}

5.3. 定時器

time.Timer 類型表示單次時間事件。當(dāng)定時器到期時,當(dāng)前時間會被發(fā)送給 C,除非定時器是被 AfterFunc 函數(shù)創(chuàng)建的。因此,如果程序持有定時器的唯一引用,當(dāng)定時器觸發(fā)時,它會被釋放,并停止定時器。

func AfterFunc(d Duration, f func()) *Timer
package main

import (
    "fmt"
    "time"
)

func main() {
    timer := time.Tick(time.Second) // 定義一個1秒間隔的定時器
    for t := range timer {
        fmt.Println(t) // 1秒鐘執(zhí)行一次
    }
}

5.4. 定時器

time.Ticker 類型代表一個間隔觸發(fā)的時間事件,它會以一個間隔(例如,1 秒、1 分鐘等)觸發(fā)多次,發(fā)送一個事件給一個通道。

func Tick(d Duration) *Ticker
package main

import (
    "fmt"
    "time"
)

func main() {
    ticker := time.NewTicker(time.Second) // 定義一個1秒間隔的定時器
    for t := range ticker.C {
        fmt.Println(t) // 1秒鐘執(zhí)行一次
    }
}

6. 時區(qū)

Go 語言中通過 LoadLocation()函數(shù)加載時區(qū)信息,它的參數(shù)是時區(qū)的名字。時區(qū)信息我們可以通過 time 包中的 LoadLocation(name string) (*Location, error)函數(shù)獲取,它返回一個 Location 對象,然后我們就可以通過 LoadLocation()函數(shù)加載時區(qū)信息了。

func LoadLocation(name string) (*Location, error)
package main

import (
    "fmt"
    "time"
)

func main() {
    // 加載時區(qū)
    loc, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        fmt.Printf("load location failed, err:%v\n", err)
        return
    }
    // 按照指定時區(qū)和指定格式解析字符串時間
    timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/01/01 00:00:00", loc)
    if err != nil {
        fmt.Printf("parse time failed, err:%v\n", err)
        return
    }
    fmt.Println(timeObj)
}

7. 時區(qū)轉(zhuǎn)換

func (t Time) In(loc *Location) Time
package main

import (
    "fmt"
    "time"
)

func main() {
    // 加載時區(qū)
    loc, _ := time.LoadLocation("Asia/Shanghai")
    // 按照指定時區(qū)和指定格式解析字符串時間
    timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", "2020/01/01 00:00:00", loc)
    if err != nil {
        fmt.Printf("parse time failed, err:%v\n", err)
        return
    }
    fmt.Println(timeObj)
    // 按照東八區(qū)的時區(qū)和格式去解析字符串時間
    timeObj, err = time.Parse("2006/01/02 15:04:05", "2020/01/01 00:00:00")
    if err != nil {
        fmt.Printf("parse time failed, err:%v\n", err)
        return
    }
    fmt.Println(timeObj)
    // 將timeObj轉(zhuǎn)換到指定時區(qū)
    newTime := timeObj.In(loc)
    fmt.Println(newTime)
}

 總結(jié)

到此這篇關(guān)于Go時間操作常用方法的文章就介紹到這了,更多相關(guān)Go時間操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go語言中的閉包詳解

    Go語言中的閉包詳解

    本文詳細(xì)講解了Go語言中的閉包,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-07-07
  • Go Web框架gin的入門教程

    Go Web框架gin的入門教程

    本篇文章主要介紹了Go Web框架gin的入門教程,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • 使用Viper處理Go應(yīng)用程序的配置方法

    使用Viper處理Go應(yīng)用程序的配置方法

    Viper是一個應(yīng)用程序配置解決方案,用于Go應(yīng)用程序,它支持JSON、TOML、YAML、HCL、envfile和Java properties配置文件格式,這篇文章主要介紹了使用Viper處理Go應(yīng)用程序的配置,需要的朋友可以參考下
    2023-09-09
  • Go微服務(wù)網(wǎng)關(guān)的實(shí)現(xiàn)

    Go微服務(wù)網(wǎng)關(guān)的實(shí)現(xiàn)

    本文主要介紹了Go微服務(wù)網(wǎng)關(guān)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • go引入自建包名報(bào)錯:package?XXX?is?not?in?std解決辦法

    go引入自建包名報(bào)錯:package?XXX?is?not?in?std解決辦法

    這篇文章主要給大家介紹了go引入自建包名報(bào)錯:package?XXX?is?not?in?std的解決辦法,這是在寫測試引入包名的時候遇到的錯誤提示,文中將解決辦法介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Golang?pprof監(jiān)控之cpu占用率統(tǒng)計(jì)原理詳解

    Golang?pprof監(jiān)控之cpu占用率統(tǒng)計(jì)原理詳解

    經(jīng)過前面的幾節(jié)對pprof的介紹,對pprof統(tǒng)計(jì)的原理算是掌握了七八十了,但唯獨(dú)還沒有分析pprof?工具是如何統(tǒng)計(jì)cpu使用情況的,今天我們來分析下這部分
    2023-04-04
  • 詳解go如何優(yōu)雅的使用接口與繼承

    詳解go如何優(yōu)雅的使用接口與繼承

    Go語言中的接口和嵌套結(jié)構(gòu)體是兩種重要的代碼設(shè)計(jì)方式,接口定義了一組方法簽名,使得不同的類型能夠以相同的方式進(jìn)行交互,本文將給大家介紹go語言如何優(yōu)雅的使用接口與繼承,文中有詳細(xì)的代碼供大家參考,需要的朋友可以參考下
    2024-06-06
  • go-zero源碼閱讀之布隆過濾器實(shí)現(xiàn)代碼

    go-zero源碼閱讀之布隆過濾器實(shí)現(xiàn)代碼

    布隆過濾器可以用于檢索一個元素是否在一個集合中。它的優(yōu)點(diǎn)是空間效率和查詢時間都比一般的算法要好的多,缺點(diǎn)是有一定的誤識別率和刪除困難,這篇文章主要介紹了go-zero源碼閱讀-布隆過濾器,需要的朋友可以參考下
    2023-02-02
  • 一文帶你了解Golang中reflect反射的常見錯誤

    一文帶你了解Golang中reflect反射的常見錯誤

    go?反射的錯誤大多數(shù)都來自于調(diào)用了一個不適合當(dāng)前類型的方法,?而且,這些錯誤通常是在運(yùn)行時才會暴露出來,而不是在編譯時,如果我們傳遞的類型在反射代碼中沒有被覆蓋到那么很容易就會?panic。本文就介紹一下使用?go?反射時很大概率會出現(xiàn)的錯誤,需要的可以參考一下
    2023-01-01
  • Golang WaitGroup實(shí)現(xiàn)原理解析

    Golang WaitGroup實(shí)現(xiàn)原理解析

    WaitGroup是Golang并發(fā)的兩種方式之一,一個是Channel,另一個是WaitGroup,下面這篇文章主要給大家介紹了關(guān)于golang基礎(chǔ)之waitgroup用法以及使用要點(diǎn)的相關(guān)資料,需要的朋友可以參考下
    2023-02-02

最新評論