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

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

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

1. time 包

1.1. 時(shí)間類型

Go 語(yǔ)言中時(shí)間類型有兩種:

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

1.2. 時(shí)間戳

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

1.3. 時(shí)間間隔

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

1.4. 時(shí)間操作

Go 語(yǔ)言中時(shí)間操作主要有兩種:

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

2. 獲取時(shí)間

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

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

func Now() Time
package main

import (
    "fmt"
    "time"
)

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

2.2. 獲取指定時(shí)間

time.Date()函數(shù)可以獲取指定的時(shí)間,其參數(shù)分別是:年、月、日、時(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() {
    // 獲取指定時(shí)間
    date := time.Date(2020, 1, 1, 0, 0, 0, 0, time.Local)
    fmt.Printf("date:%v\n", date)
}

3. 格式化時(shí)間

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

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

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

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now() // 獲取當(dāng)前時(shí)間
    // 格式化的模板為Go的出生時(shí)間2006年1月2號(hào)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)時(shí)間類型

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

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

import (
    "fmt"
    "time"
)

func main() {
    // 加載時(shí)區(qū)
    loc, _ := time.LoadLocation("Asia/Shanghai")
    // 按照指定時(shí)區(qū)和指定格式解析字符串時(shí)間
    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. 時(shí)間常量

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

5. 時(shí)間操作

5.1. 獲取時(shí)間戳

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

func (t Time) Unix() int64
package main

import (
    "fmt"
    "time"
)

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

5.2. 時(shí)間間隔

time.Duration 是 time 包定義的一個(gè)類型,它代表兩個(gè)時(shí)間點(diǎn)之間經(jīng)過(guò)的時(shí)間,以納秒為單位。time.Duration 表示一段時(shí)間間隔,可表示的最長(zhǎng)時(shí)間段大約 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í)行到這里會(huì)暫停2秒
    time.Sleep(2 * time.Second)
    fmt.Println("2 seconds later")
    // 兩個(gè)時(shí)間相減
    fmt.Printf("passed %v\n", time.Since(now))
}

5.3. 定時(shí)器

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

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

import (
    "fmt"
    "time"
)

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

5.4. 定時(shí)器

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

func Tick(d Duration) *Ticker
package main

import (
    "fmt"
    "time"
)

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

6. 時(shí)區(qū)

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

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

import (
    "fmt"
    "time"
)

func main() {
    // 加載時(shí)區(qū)
    loc, err := time.LoadLocation("Asia/Shanghai")
    if err != nil {
        fmt.Printf("load location failed, err:%v\n", err)
        return
    }
    // 按照指定時(shí)區(qū)和指定格式解析字符串時(shí)間
    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. 時(shí)區(qū)轉(zhuǎn)換

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

import (
    "fmt"
    "time"
)

func main() {
    // 加載時(shí)區(qū)
    loc, _ := time.LoadLocation("Asia/Shanghai")
    // 按照指定時(shí)區(qū)和指定格式解析字符串時(shí)間
    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ū)的時(shí)區(qū)和格式去解析字符串時(shí)間
    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)換到指定時(shí)區(qū)
    newTime := timeObj.In(loc)
    fmt.Println(newTime)
}

 總結(jié)

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

相關(guān)文章

  • Go語(yǔ)言中的閉包詳解

    Go語(yǔ)言中的閉包詳解

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

    Go Web框架gin的入門教程

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

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

    Viper是一個(gè)應(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),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • go引入自建包名報(bào)錯(cuò):package?XXX?is?not?in?std解決辦法

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

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

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

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

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

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

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

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

    一文帶你了解Golang中reflect反射的常見(jiàn)錯(cuò)誤

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

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

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

最新評(píng)論