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

一文帶你了解Go語言中time包的時(shí)間常用操作

 更新時(shí)間:2022年12月04日 10:54:17   作者:陳明勇  
在日常開發(fā)中,我們避免不了時(shí)間的使用,我們可能需要獲取當(dāng)前時(shí)間,然后格式化保存,也可能需要在時(shí)間類型與字符串類型之間相互轉(zhuǎn)換等。本文將會(huì)對(duì)?Go?time?包里面的常用函數(shù)和方法進(jìn)行介紹,需要的可以參考一下

前言

在日常開發(fā)中,我們避免不了時(shí)間的使用,我們可能需要獲取當(dāng)前時(shí)間,然后格式化保存,也可能需要在時(shí)間類型與字符串類型之間相互轉(zhuǎn)換等。本文將會(huì)對(duì) Go time 包里面的常用函數(shù)和方法進(jìn)行介紹。

Now():獲取當(dāng)前本地的時(shí)間

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println(now) // 2022-12-03 21:06:16.1658077 +0800 CST m=+5.936223001
}

Now() 函數(shù)返回的是一個(gè) time 包內(nèi)置的一個(gè)結(jié)構(gòu)體 Time

獲取具體時(shí)間單位的值(yeah、month、day ······)

根據(jù) Now() 的返回的 Time 結(jié)構(gòu)體,我們通過其方法可以獲取到具體的時(shí)間單位的值,例如 年、月、日等等。

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Println("年:", now.Year())
    fmt.Println("月:", now.Month())
    fmt.Println("數(shù)字格式的月:", int(now.Month()))
    fmt.Println("日:", now.Day())
    fmt.Println("時(shí):", now.Hour())
    fmt.Println("分:", now.Minute())
    fmt.Println("秒:", now.Second())
}

通過 Time 結(jié)構(gòu)體的 Year()、Month()、Day()、Hour()Minute()、Second() 這些方法,可以獲取到當(dāng)前時(shí)間的 年、月、日、時(shí)、分、秒的值。

時(shí)間格式化

通過 Time 結(jié)構(gòu)體的 Format(layout string) 方法可以將時(shí)間轉(zhuǎn)換成指定格式并以 string 類型返回。

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    format1 := now.Format("2006-01-02 15:04:05")
    format2 := now.Format("2006/01/02 15:04:05")
    format3 := now.Format("2006-01-02")
    format4 := now.Format("2006/01/02")
    format5 := now.Format("15:04:05")

    fmt.Println(format1) // 2022-12-03 22:27:56
    fmt.Println(format2) // 2022/12/03 22:27:56
    fmt.Println(format3) // 2022-12-03
    fmt.Println(format4) // 2022/12/03
    fmt.Println(format5) // 22:27:56
}

其中 layout 格式參數(shù),Go 強(qiáng)制我們使用 2006-01-02 15:04:05 這個(gè)固定的值,連接符如 - 可以改變,但是數(shù)字不能變,否則時(shí)間會(huì)對(duì)不上。

獲取秒、微秒、毫秒、納秒

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    // 獲取秒
    fmt.Println(now.Unix()) // 1670078476
    // 獲取毫秒
    fmt.Println(now.UnixMilli()) // 1670079987508082
    // 獲取微秒
    fmt.Println(now.UnixMicro()) // 1670079987508082
    // 獲取納秒
    fmt.Println(now.UnixNano()) // 1670079987508082500
}

通過 time 結(jié)構(gòu)體的 Unix()、UnixMilli()UnixMicro()、UnixNano() 方法可以獲取對(duì)應(yīng)是秒時(shí)間戳、毫秒時(shí)間戳、微秒時(shí)間戳和納秒時(shí)間戳。

通過指定年月日等參數(shù)獲取時(shí)間

import (
    "fmt"
    "time"
)

func main() {
    date := time.Date(2002, 12, 03, 12, 12, 12, 0, time.UTC)
    fmt.Println(date) // 2022-12-03 12:12:12 +0000 UTC
}

通過 Date(year int, month Month, day, hour, min, sec, nsec int, loc *Location) Time 函數(shù),傳入指定的年月日等參數(shù),獲取指定是時(shí)間變量。

時(shí)間戳與時(shí)間的轉(zhuǎn)換

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()

    time1 := time.Unix(now.Unix(), 0).Format("2006-01-02 15:04:05")
    time2 := time.UnixMilli(now.UnixMilli()).Format("2006-01-02 15:04:05")
    time3 := time.UnixMicro(now.UnixMicro()).Format("2006-01-02 15:04:05")
    fmt.Println(time1) // 2022-12-03 23:03:33
    fmt.Println(time2) // 2022-12-03 23:03:33
    fmt.Println(time3) // 2022-12-03 23:03:33
}

通過 Unix()UnixMilli()、和 UnixMicro() 方法可以將對(duì)應(yīng)時(shí)間戳轉(zhuǎn)換成當(dāng)前時(shí)間并格式化。

字符串轉(zhuǎn)時(shí)間格式

import (
   "fmt"
   "time"
)

func main() {
   t1, err := time.Parse("2006-01-02 15:04:05", "2022-12-03 13:00:00")
   if err != nil {
      fmt.Println("err: ", err)
      return
   }
   fmt.Println(t1) // 2022-12-03 13:00:00 +0000 UTC

   t2, err := time.Parse("2006-01-02", "2022-12-03")
   if err != nil {
      fmt.Println("err: ", err)
      return
   }
   fmt.Println(t2) // 2022-12-03 00:00:00 +0000 UTC

   t3, err := time.Parse("15:04:05", "13:00:00")
   if err != nil {
      fmt.Println("err: ", err)
      return
   }
   fmt.Println(t3) // 0000-01-01 13:00:00 +0000 UTC
}

通過 Parse(layout, value string) (Time, error) 函數(shù)將字符串轉(zhuǎn)成 time 時(shí)間。layout 格式必須與 value 的格式相對(duì)應(yīng),否則會(huì)返回 error。

時(shí)間的添加和減少操作

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    newTime := now.Add(time.Hour * 1)
    fmt.Println(newTime.Format("2006-01-02 15:04:05"))
}
  • 通過 (t Time) Add(d Duration) Time 方法,可以對(duì)時(shí)間進(jìn)行添加或減少操作,傳入的參數(shù)是正數(shù)表示添加,負(fù)數(shù)表示減少。添加單位有天、小時(shí)、分鐘等。
  • Duration 表示所添加的時(shí)間,time.Hour 表示小時(shí)單位,除此之外還有 time.Minute 分鐘單位、time.Second 秒單位等。

計(jì)算兩個(gè)時(shí)間的時(shí)間差

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    newTime := now.Add(time.Hour * 1)
    fmt.Println(newTime.Sub(now)) // 1h0m0s
}

通過 Sub(u Time) Duration 方法可以計(jì)算兩個(gè)時(shí)間的時(shí)間差。

計(jì)算當(dāng)前時(shí)間與某個(gè)時(shí)間的時(shí)間差

import (
    "fmt"
    "time"
)

func main() {
    beforeTime := time.Now().Add(time.Hour * -1)
    fmt.Println(time.Since(beforeTime)) // 1h0m0s
}

通過 Add(d Duration) Time 方法將當(dāng)前時(shí)間減少一小時(shí),然后通過 Since(t Time) Duration 函數(shù)比較當(dāng)前時(shí)間與其他時(shí)間的時(shí)間差。

判斷當(dāng)前時(shí)間是否在某個(gè)時(shí)間之前

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    date := time.Date(2022, 12, 03, 12, 12, 12, 0, time.UTC)
    fmt.Println(now.Before(date)) // false
}

通過 Before(u Time) bool #方法,判斷當(dāng)前的時(shí)間是否在傳入的時(shí)間之前,返回值為布爾值,true 為是,false 為否。

判斷當(dāng)前時(shí)間是否在某個(gè)時(shí)間之后

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    date := time.Date(2022, 12, 03, 12, 12, 12, 0, time.UTC)
    fmt.Println(now.After(date)) // true
}

通過 After(u Time) bool 方法,判斷當(dāng)前的時(shí)間是否在傳入的時(shí)間之后,返回值為布爾值,true 為是,false 為否。

小結(jié)

本文介紹了如果獲取當(dāng)前時(shí)間、在當(dāng)前時(shí)間的前提下獲取具體的年月日時(shí)分秒、時(shí)間格式化和時(shí)間戳與時(shí)間的轉(zhuǎn)換以及計(jì)算時(shí)間差的方法等。掌握了這些函數(shù)和方法的使用,應(yīng)對(duì)開發(fā)中 時(shí)間操作的場(chǎng)景不成問題。

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

相關(guān)文章

  • go 下載非標(biāo)準(zhǔn)庫包(部份包被墻了)到本地使用的方法

    go 下載非標(biāo)準(zhǔn)庫包(部份包被墻了)到本地使用的方法

    今天小編就為大家分享一篇go 下載非標(biāo)準(zhǔn)庫包(部份包被墻了)到本地使用的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • Golang流程控制語句的具體使用

    Golang流程控制語句的具體使用

    在編寫程序時(shí),流程控制是必不可少的一部分,本文主要介紹了Golang流程控制語句的具體使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Go?gRPC服務(wù)端流式RPC教程示例

    Go?gRPC服務(wù)端流式RPC教程示例

    這篇文章主要為大家介紹了Go?gRPC服務(wù)端流式RPC教程示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Go defer 原理和源碼剖析(推薦)

    Go defer 原理和源碼剖析(推薦)

    這篇文章主要介紹了Go defer 原理和源碼剖析,需要的朋友可以參考下
    2021-11-11
  • 6行代碼快速解決golang TCP粘包問題

    6行代碼快速解決golang TCP粘包問題

    在用golang開發(fā)人工客服系統(tǒng)的時(shí)候碰到了粘包問題,那么什么是粘包呢?下面這篇文章主要給大家介紹了關(guān)于如何通過6行代碼快速解決golang TCP粘包問題的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • goland 恢復(fù)已更改文件的操作

    goland 恢復(fù)已更改文件的操作

    這篇文章主要介紹了goland 恢復(fù)已更改文件的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • golang sql連接池的實(shí)現(xiàn)方法詳解

    golang sql連接池的實(shí)現(xiàn)方法詳解

    database/sql是golang的標(biāo)準(zhǔn)庫之一,它提供了一系列接口方法,用于訪問關(guān)系數(shù)據(jù)庫。下面這篇文章主要給大家介紹了關(guān)于golang sql連接池用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來一起看看吧
    2018-09-09
  • Go語言學(xué)習(xí)otns示例分析

    Go語言學(xué)習(xí)otns示例分析

    這篇文章主要為大家介紹了Go語言學(xué)習(xí)otns示例分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go 防止 goroutine 泄露的方法

    Go 防止 goroutine 泄露的方法

    Go 的并發(fā)模型與其他語言不同,雖說它簡(jiǎn)化了并發(fā)程序的開發(fā)難度,但如果不了解使用方法,常常會(huì)遇到 goroutine 泄露的問題。本篇主要從如何寫出正確代碼的角度來介紹如何防止 goroutine 的泄露,需要的朋友可以參考下
    2019-09-09
  • go語言對(duì)文件按照指定塊大小進(jìn)行分割的方法

    go語言對(duì)文件按照指定塊大小進(jìn)行分割的方法

    這篇文章主要介紹了go語言對(duì)文件按照指定塊大小進(jìn)行分割的方法,實(shí)例分析了Go語言文件操作的技巧,需要的朋友可以參考下
    2015-03-03

最新評(píng)論