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

Go語(yǔ)言中時(shí)間time相關(guān)處理方法詳解

 更新時(shí)間:2024年10月08日 08:52:38   作者:景天科技苑  
在Go語(yǔ)言中,time?包是處理時(shí)間和日期的核心,它提供了豐富的函數(shù)和方法,用于顯示、測(cè)量、計(jì)算、格式化、解析時(shí)間等,本文給大家詳細(xì)介紹了Go時(shí)間time相關(guān)處理方法的相關(guān)資料,需要的朋友可以參考下

引言

在Go語(yǔ)言中,time 包是處理時(shí)間和日期的核心。它提供了豐富的函數(shù)和方法,用于顯示、測(cè)量、計(jì)算、格式化、解析時(shí)間等。

1. 時(shí)間的基本獲取

在Go語(yǔ)言中,time.Time 類型用于表示時(shí)間。我們可以通過 time.Now() 函數(shù)獲取當(dāng)前的時(shí)間對(duì)象,進(jìn)而獲取年、月、日、時(shí)、分、秒等信息。

示例代碼

package main

import (
    "fmt"
    "time"
)

func main() {
    now := time.Now()
    fmt.Printf("current time: %v\n", now)
    //得到的是time.Time類型的結(jié)構(gòu)體數(shù)據(jù),包含 常量:日月年時(shí)分秒 周日-周六 方法:獲取常量,計(jì)算。
    fmt.Printf("current time數(shù)據(jù)類型: %T\n", now)
        //打印年月日時(shí)分秒,得到的都是int類型數(shù)據(jù)


    year := now.Year()
    month := now.Month()
    day := now.Day()
    hour := now.Hour()
    minute := now.Minute()
    second := now.Second()
        //Printf : 整數(shù)補(bǔ)位--02如果不足兩位,左側(cè)用0補(bǔ)齊輸出


    fmt.Printf("%d-%02d-%02d %02d:%02d:%02d\n", year, month, day, hour, minute, second)
}

通過now.Year()等得到的都是int類型數(shù)據(jù)

在這里插入圖片描述

在這里插入圖片描述

2. 時(shí)間戳的獲取與轉(zhuǎn)換

時(shí)間戳是自1970年1月1日(08:00:00 GMT)至當(dāng)前時(shí)間的總秒數(shù)(或毫秒數(shù))。
Go語(yǔ)言中,可以通過time.Now().Unix()獲取秒級(jí)時(shí)間戳,通過time.Now().UnixNano()獲取納秒級(jí)時(shí)間戳。

示例代碼

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    now := time.Now()  
    timestamp1 := now.Unix()         // 秒級(jí)時(shí)間戳  
    timestamp2 := now.UnixNano()     // 納秒級(jí)時(shí)間戳  
      
    fmt.Printf("current timestamp1: %v\n", timestamp1)  
    fmt.Printf("current timestamp2: %v\n", timestamp2)  
      
    // 將時(shí)間戳轉(zhuǎn)換為時(shí)間對(duì)象  
    timeObj := time.Unix(timestamp1, 0)  
    fmt.Println(timeObj)  
      
    // 轉(zhuǎn)換為指定時(shí)區(qū)的時(shí)間對(duì)象  
    secondsEastOfUTC := int((8 * time.Hour).Seconds())  
    beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)  
    beijingTimeObj := time.Unix(timestamp1, 0).In(beijing)  
    fmt.Println(beijingTimeObj)  
}

在這里插入圖片描述

通過time.Now().Unix()獲取的時(shí)間戳是int64數(shù)據(jù)類型

在這里插入圖片描述

如果想要通過時(shí)間戳字符串轉(zhuǎn)化為時(shí)間格式,需要將時(shí)間戳字符串轉(zhuǎn)化為int64類型數(shù)據(jù)

package main

import (
    "fmt"
    "strconv"
    "time"
)

func main() {
    //時(shí)間戳字符串
    timrstr := "1617922800"

    //時(shí)間戳是int64類型數(shù)據(jù),將時(shí)間戳字符串轉(zhuǎn)化為int64類型
    timestamp, err := strconv.ParseInt(timrstr, 10, 64)
    if err != nil {
        fmt.Println("err:", err)
        return
    }
    t := time.Unix(timestamp, 0)
    fmt.Println(t)
}

在這里插入圖片描述

3. 時(shí)間的格式化

Go語(yǔ)言允許你按照特定的格式來(lái)格式化時(shí)間對(duì)象,或者將字符串按照指定的格式解析為時(shí)間對(duì)象。
time.Time 提供了 Format 方法來(lái)格式化時(shí)間。
func (t Time) Format(layout string) string

Go語(yǔ)言的時(shí)間格式化模板不是常見的Y-m-d H:M:S,而是使用Go的誕生時(shí)間2006年1月2日 15點(diǎn)04分作為記憶口訣。

格式化模板使用Go的出生時(shí)間“2006年1月2日 15時(shí)04分05秒”(記憶口訣為“2006 1 2 3 4 5”)。

模板必須用這個(gè)時(shí)間,否則格式化不了

格式化時(shí)間

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 時(shí)間格式化 2023-02-23 20:43:49
    // 格式化模板: yyyy-MM-dd HH:mm:ss
    // Go語(yǔ)言誕生的時(shí)間作為格式化模板:2006年1月2號(hào)下午3點(diǎn)4分5秒
    // Go語(yǔ)言格式化時(shí)間的代碼:2006-01-02 15:04:05  (記憶方式:2006 12 345)
    // 固定的:"2006-01-02 15:04:05"
    now := time.Now()

    // 24小時(shí)制
    fmt.Println(now.Format("2006-01-02 15:04:05")) //2024-09-29 16:34:52

    // 12小時(shí)制
    fmt.Println(now.Format("2006-01-02 03:04:05 PM")) //2024-09-29 04:34:52 PM

    // 自定義格式
    fmt.Println(now.Format("Jan 2, 2006 at 3:04pm (MST)")) // Sep 29, 2024 at 4:34pm (CST)
    fmt.Println(now.Format("2006/01/02 15:04"))            // 2024/09/29 16:34
    fmt.Println(now.Format("15:04 2006/01/02"))            // 16:34 2024/09/29
    fmt.Println(now.Format("2006/01/02"))                  // 2024/09/29


}

在這里插入圖片描述

4. 解析時(shí)間字符串

time.Parse 和 time.ParseInLocation 函數(shù)可以將符合特定格式的字符串解析為 time.Time 對(duì)象。
Parse函數(shù)默認(rèn)使用本地時(shí)區(qū),而ParseInLocation允許指定時(shí)區(qū)。

4.1 基本解析

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

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  

    const layout = "2006-01-02 15:04:05"   //模板時(shí)間必須是這個(gè)
        // 假設(shè)這是需要解析的時(shí)間字符串  

    const timeStr = "2023-09-10 12:34:56"  
  
    t, err := time.Parse(layout, timeStr)  
    if err != nil {  
        fmt.Println("Error parsing time:", err)  
        return  
    }  
    fmt.Println("Parsed time:", t)  
}

在這里插入圖片描述

加入我們模板時(shí)間用錯(cuò),解析報(bào)錯(cuò)

在這里插入圖片描述

4.2 帶時(shí)區(qū)的解析

如果時(shí)間字符串中包含時(shí)區(qū)信息,可以使用 time.ParseInLocation 進(jìn)行解析,并指定時(shí)區(qū)。
加載時(shí)區(qū)
func LoadLocation(name string) (*Location, error)

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 假設(shè)這是需要解析的時(shí)間字符串,包含時(shí)區(qū)信息  
    const layout = "2006-01-02 15:04:05 MST"  
    const timeStr = "2023-09-10 12:34:56 CST"  
  
    // 加載時(shí)區(qū)  
    loc, err := time.LoadLocation("Asia/Shanghai")  
    if err != nil {  
        fmt.Println("Error loading location:", err)  
        return  
    }  
  
    t, err := time.ParseInLocation(layout, timeStr, loc)  
    if err != nil {  
        fmt.Println("Error parsing time:", err)  
        return  
    }  
    fmt.Println("Parsed time with location:", t)  
}

在這里插入圖片描述

5. 時(shí)間的計(jì)算

time 包提供了豐富的函數(shù)和方法來(lái)支持時(shí)間的計(jì)算,如時(shí)間的加減、時(shí)間間隔的計(jì)算等。

5.1 時(shí)間的加減

使用 time.Time 的 Add 方法可以在原有時(shí)間的基礎(chǔ)上加上或減去一定的時(shí)間間隔。

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    now := time.Now()  
    // 加上一小時(shí)  
    oneHourLater := now.Add(time.Hour)  
    fmt.Println("One hour later:", oneHourLater)  
  
    // 減去一天  
    oneDayAgo := now.Add(-24 * time.Hour)  
    fmt.Println("One day ago:", oneDayAgo)  
}

在這里插入圖片描述

5.2 時(shí)間間隔的計(jì)算

time.Duration 類型代表兩個(gè)時(shí)間點(diǎn)之間經(jīng)過的時(shí)間,以納秒為單位。可以使用 time.Time 的 Sub 方法來(lái)計(jì)算兩個(gè)時(shí)間點(diǎn)之間的時(shí)間間隔。

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    start := time.Now()  
    // 假設(shè)這里有一些耗時(shí)操作  
    time.Sleep(2 * time.Second)  
    end := time.Now()  
  
    duration := end.Sub(start)  
    fmt.Println("Duration:", duration)  
    
        // 轉(zhuǎn)換為不同單位
    hours := duration.Hours()
    minutes := duration.Minutes()
    seconds := duration.Seconds()
    fmt.Printf("Duration in hours: %v\n", hours)
    fmt.Printf("Duration in minutes: %v\n", minutes)
    fmt.Printf("Duration in seconds: %v\n", seconds)
}

在這里插入圖片描述

使用time.ParseDuration解析時(shí)間間隔字符串

d, _ := time.ParseDuration("1.2h")
fmt.Println("Parsed Duration:", d)

在這里插入圖片描述

5.3 判斷時(shí)間先后

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    t1 := time.Now()
    t2 := t1.Add(time.Hour)
    fmt.Println(t1)
    fmt.Println(t2)

    // 判斷時(shí)間先后
    fmt.Println(t1.Before(t2)) // true
    fmt.Println(t1.After(t2))  // false
    fmt.Println(t1.Equal(t2))  // false


}

在這里插入圖片描述

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

6.1 時(shí)區(qū)表示

在Go語(yǔ)言中,時(shí)區(qū)通過time.Location類型表示??梢允褂胻ime.LoadLocation函數(shù)加載一個(gè)時(shí)區(qū),或者使用time.FixedZone函數(shù)創(chuàng)建一個(gè)固定偏移量的時(shí)區(qū)。

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 加載時(shí)區(qū)  
    loc, err := time.LoadLocation("Asia/Shanghai")  
    if err != nil {  
        fmt.Println("Error loading location:", err)  
        return  
    }  
    fmt.Println(loc)  
  
    // 創(chuàng)建固定偏移量的時(shí)區(qū)  
    beijing := time.FixedZone("Beijing Time", 8*3600)  
    fmt.Println(beijing)  
}

在這里插入圖片描述

6.2 時(shí)區(qū)轉(zhuǎn)換

在處理跨時(shí)區(qū)的時(shí)間時(shí),可能需要將時(shí)間從一個(gè)時(shí)區(qū)轉(zhuǎn)換到另一個(gè)時(shí)區(qū)。這通常涉及到創(chuàng)建兩個(gè)時(shí)間對(duì)象,一個(gè)代表原始時(shí)間,另一個(gè)代表轉(zhuǎn)換后的時(shí)間,并指定不同的時(shí)區(qū)。

package main  
  
import (  
    "fmt"  
    "time"  
)  
  
func main() {  
    // 原始時(shí)間(UTC)  
    utcTime := time.Date(2023, 9, 10, 12, 0, 0, 0, time.UTC)  
    fmt.Println("UTC Time:", utcTime)  
  
    // 轉(zhuǎn)換為北京時(shí)間  
    beijingLoc, err := time.LoadLocation("Asia/Shanghai")  
    if err != nil {  
        fmt.Println("Error loading location:", err)  
        return  
    }  
    beijingTime := utcTime.In(beijingLoc)  
    fmt.Println("Beijing Time:", beijingTime)  
}

在這里插入圖片描述

7. 總結(jié)

Go 語(yǔ)言中的 time 包提供了強(qiáng)大的時(shí)間處理功能,包括時(shí)間的表示、計(jì)算、格式化和解析等。通過本文的詳細(xì)介紹和實(shí)際應(yīng)用案例,相信讀者已經(jīng)對(duì) Go 語(yǔ)言中的時(shí)間處理有了更深入的了解。在實(shí)際編程中,合理利用 time 包的功能,可以大大簡(jiǎn)化時(shí)間相關(guān)的操作,提高編程效率。

以上就是Go語(yǔ)言中時(shí)間time相關(guān)處理方法詳解的詳細(xì)內(nèi)容,更多關(guān)于Go時(shí)間time相關(guān)處理方法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 如何使用Goland IDE go mod 方式構(gòu)建項(xiàng)目

    如何使用Goland IDE go mod 方式構(gòu)建項(xiàng)目

    這篇文章主要介紹了如何使用Goland IDE go mod 方式構(gòu)建項(xiàng)目,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 深入理解Go設(shè)計(jì)模式之代理模式

    深入理解Go設(shè)計(jì)模式之代理模式

    代理模式是一種結(jié)構(gòu)型設(shè)計(jì)模式,?其中代理控制著對(duì)于原對(duì)象的訪問,?并允許在將請(qǐng)求提交給原對(duì)象的前后進(jìn)行一些處理,從而增強(qiáng)原對(duì)象的邏輯處理,這篇文章主要來(lái)學(xué)習(xí)一下代理模式的構(gòu)成和用法,需要的朋友可以參考下
    2023-05-05
  • 一文帶大家搞懂Go語(yǔ)言中的迭代器

    一文帶大家搞懂Go語(yǔ)言中的迭代器

    迭代器是使用戶可在容器對(duì)象上遍訪的對(duì)象,設(shè)計(jì)人員使用此接口無(wú)需關(guān)心容器對(duì)象的內(nèi)存分配的實(shí)現(xiàn)細(xì)節(jié),本文主要為大家詳細(xì)介紹一下Go語(yǔ)言中的迭代器的實(shí)現(xiàn),需要的可以了解下
    2025-02-02
  • Golang 實(shí)現(xiàn)插入排序的方法示例(2種)

    Golang 實(shí)現(xiàn)插入排序的方法示例(2種)

    這篇文章主要介紹了Golang 實(shí)現(xiàn)插入排序的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • golang中new與make的區(qū)別講解

    golang中new與make的區(qū)別講解

    new只能開辟單個(gè)空間,不能為引用類型開辟多個(gè)空間,并且new是對(duì)類型進(jìn)行內(nèi)存的開辟,返回一個(gè)指向該內(nèi)存空間的指針類型,如果使用new去初始化引用數(shù)據(jù)類型,不是很合適(當(dāng)然,new一個(gè)對(duì)象還是可以的),因此就需要用到另一個(gè)內(nèi)置函數(shù)make,需要的朋友可以參考下
    2023-01-01
  • 關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng)總結(jié)(強(qiáng)烈推薦!)

    關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng)總結(jié)(強(qiáng)烈推薦!)

    map是一種無(wú)序的基于key-value的數(shù)據(jù)結(jié)構(gòu),Go語(yǔ)言中的map是引用類型,必須初始化才能使用,下面這篇文章主要給大家介紹了關(guān)于golang中map使用的幾點(diǎn)注意事項(xiàng),需要的朋友可以參考下
    2023-01-01
  • go 代碼格式化和風(fēng)格開發(fā)者指南

    go 代碼格式化和風(fēng)格開發(fā)者指南

    這篇文章主要為大家介紹了go 代碼格式化和風(fēng)格開發(fā)者指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • go語(yǔ)言通過zlib壓縮數(shù)據(jù)的方法

    go語(yǔ)言通過zlib壓縮數(shù)據(jù)的方法

    這篇文章主要介紹了go語(yǔ)言通過zlib壓縮數(shù)據(jù)的方法,實(shí)例分析了Go語(yǔ)言中zlib的使用技巧,需要的朋友可以參考下
    2015-03-03
  • Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究

    Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究

    這篇文章主要為大家介紹了Go語(yǔ)言的匿名字段實(shí)現(xiàn)組合復(fù)用實(shí)例探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Golang基于Vault實(shí)現(xiàn)敏感數(shù)據(jù)加解密

    Golang基于Vault實(shí)現(xiàn)敏感數(shù)據(jù)加解密

    數(shù)據(jù)加密是主要的數(shù)據(jù)安全防護(hù)技術(shù)之一,敏感數(shù)據(jù)應(yīng)該加密存儲(chǔ)在數(shù)據(jù)庫(kù)中,降低泄露風(fēng)險(xiǎn),本文將介紹一下利用Vault實(shí)現(xiàn)敏感數(shù)據(jù)加解密的方法,需要的可以參考一下
    2023-07-07

最新評(píng)論