最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言時(shí)間相關(guān)操作合集(超詳細(xì))

 更新時(shí)間:2023年08月01日 11:33:03   作者:程序員讀書  
在開發(fā)應(yīng)用程序的過程中,經(jīng)常需要記錄某些操作的時(shí)間或者格式化時(shí)間戳,因此大部分編程語言都會(huì)有操作時(shí)間的庫,Go語言當(dāng)然也不例外,本文我們就一起來學(xué)習(xí)一下time包的使用

在我們開發(fā)應(yīng)用程序的過程中,經(jīng)常需要記錄某些操作的時(shí)間或者格式化時(shí)間戳,因此大部分編程語言都會(huì)有操作時(shí)間的庫,Go語言當(dāng)然也不例外。

Go語言對(duì)時(shí)間的操作能力集中標(biāo)準(zhǔn)庫time包里,所以在這篇文章中,我們一起來學(xué)習(xí)time包的使用。

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

在Go語言中,要獲取當(dāng)前的時(shí)間非常簡(jiǎn)單,只要調(diào)用time包的Now()函數(shù)即可:

fmt.Println(time.Now())

上面代碼的輸出結(jié)果是:

2023-06-16 09:44:58.726134 +0800 CST m=+0.000151257

上面結(jié)果的各部分意義是:

  • 2023-06-06:表示日期
  • 09:44:58.726134:表示時(shí)間
  • +0800 CST:時(shí)區(qū),這里是指東八區(qū)
  • m=+0.000151257:?jiǎn)握{(diào)時(shí)間,用于表示兩個(gè)時(shí)間點(diǎn)的長(zhǎng)度。

時(shí)間戳與時(shí)區(qū)

時(shí)區(qū)

地球上各個(gè)地區(qū)因?yàn)榻?jīng)度的不同被劃分為24個(gè)時(shí)區(qū),這24個(gè)時(shí)區(qū)以零時(shí)區(qū)(中時(shí)區(qū))開始劃分為東西各12個(gè)時(shí)區(qū),相鄰兩個(gè)時(shí)區(qū)之間相差一個(gè)小時(shí),其計(jì)算規(guī)則是向東每跨過一個(gè)時(shí)區(qū)增加1個(gè)小時(shí),向西每跨一個(gè)時(shí)間減去1個(gè)小時(shí):

假設(shè)此時(shí)零時(shí)區(qū)是上午9:00的話,那么其他各個(gè)時(shí)區(qū)的時(shí)間根據(jù)所在時(shí)區(qū)會(huì)有所不同,下面表格列舉了幾個(gè)時(shí)區(qū)的時(shí)間:

西七區(qū)(加里福利亞州)西五區(qū)(紐約)西四區(qū)(圣地亞哥)零時(shí)區(qū)泰國(東7區(qū))中國(東八區(qū))日本(東九區(qū))
1:004:007:009:0016:0017:0018:00

世界標(biāo)準(zhǔn)時(shí)間的縮寫為UTCUTC也表示零時(shí)區(qū),如果我們想表示某個(gè)時(shí)區(qū)的話,比如東八區(qū),其寫法為UTC+8,西五區(qū)則為UTC-5

另外,時(shí)區(qū)一般有自己的縮寫,比如PRC表示中國標(biāo)準(zhǔn)時(shí)間,Asia/Shanghai也是指中國時(shí)間,也就是說PRC、Asia/ShanghaiUTC+8都是表示東八區(qū)的中國時(shí)間。

時(shí)間戳

時(shí)間戳是指以格林尼治1970年1月1日 00:00:00為起點(diǎn)的秒數(shù),時(shí)間戳不受時(shí)區(qū)的影響,所在在地球上任何一個(gè)地方在某一時(shí)刻獲得的時(shí)間戳都是一樣的。

Go語言中,要獲得當(dāng)前時(shí)間戳也非常簡(jiǎn)單:

fmt.Println(time.Now().Unix())

time.Time

Time

前面我們通過time.Now()獲取當(dāng)前時(shí)間,實(shí)際上該函數(shù)返回一個(gè)time包下的Time結(jié)構(gòu)體,Time結(jié)構(gòu)體表示一個(gè)時(shí)間對(duì)象,大部分操作時(shí)間的功能都集中在這個(gè)結(jié)構(gòu)體中:

time.Now().Year()?//獲取當(dāng)前年份
time.Now().Month()?//獲取當(dāng)前月份

時(shí)間格式規(guī)則

有了表示時(shí)間的對(duì)象后,如果想按照我們想要的格式輸出可以調(diào)用TimeFormat()方法,如果你接觸過其他編程語言(比如PHP),這時(shí)可能會(huì)覺得需要給Format()傳進(jìn)入類似下面的參數(shù):

Y-m-d H:i:s

在上面給出的格式中,Y表示年份,m表示月份,d表示日期,H表示小時(shí),i表示分鐘,s表示秒。

在其他編程語言中,使用以上格式進(jìn)行時(shí)間格式化處理,會(huì)得到下面這樣的日期:

2023-06-18 18:32:30

不過在Go語言中,要想將得到同樣的結(jié)果,你需要這樣做:

time.Now().Format("2006-01-02?15:04:05")

上面的代碼的運(yùn)行結(jié)果同樣是:

2023-06-18 18:32:30

從上面的格式可以看出2006-01-02 15:04:05相當(dāng)于其他編程語言的Y-m-d H:i:s,這就是Go語言在時(shí)間處理方面與其他編程語言的差異。

Go語言格式化時(shí)間的規(guī)則如下表格所示:

格式說明
2006或者06
January或01或1
Mon或者M(jìn)onday星期
2或_2或者02日期
__2或002一年中的第幾天
15或3或03小時(shí)
4或04分鐘
5或05
PMAM/PM
-0700時(shí)區(qū),±hhmm
-07:00時(shí)區(qū),±hh:mm
-07時(shí)區(qū),±hh
-070000時(shí)區(qū), ±hhmmss
-07:00:00時(shí)區(qū), ±hh:mm:ss

因此,如果我們想把當(dāng)前時(shí)間按下面的時(shí)間格式顯示的話:

年-月-日 時(shí):分:秒 星期幾 時(shí)區(qū)

我們的代碼需要這樣寫:

time.Now().Format("2006-01-02?15:04:05?Monday?-0700")

其實(shí),如果總是需要自己寫上面的格式字符串也很麻煩,因此time包下定義了很多常量,可以直接調(diào)用:

Layout??????=?"01/02?03:04:05PM?'06?-0700"?
ANSIC???????=?"Mon?Jan?_2?15:04:05?2006"
UnixDate????=?"Mon?Jan?_2?15:04:05?MST?2006"
RubyDate????=?"Mon?Jan?02?15:04:05?-0700?2006"
RFC822??????=?"02?Jan?06?15:04?MST"
RFC822Z?????=?"02?Jan?06?15:04?-0700"?
RFC850??????=?"Monday,?02-Jan-06?15:04:05?MST"
RFC1123?????=?"Mon,?02?Jan?2006?15:04:05?MST"
RFC1123Z????=?"Mon,?02?Jan?2006?15:04:05?-0700"
RFC3339?????=?"2006-01-02T15:04:05Z07:00"
RFC3339Nano?=?"2006-01-02T15:04:05.999999999Z07:00"
Kitchen?????=?"3:04PM"
Stamp??????=?"Jan?_2?15:04:05"
StampMilli?=?"Jan?_2?15:04:05.000"
StampMicro?=?"Jan?_2?15:04:05.000000"
StampNano??=?"Jan?_2?15:04:05.000000000"
DateTime???=?"2006-01-02?15:04:05"
DateOnly???=?"2006-01-02"
TimeOnly???=?"15:04:05"

Date

如果不是想獲取當(dāng)前時(shí)間,而是要指定某個(gè)時(shí)間,可以調(diào)用Date()函數(shù)構(gòu)建一個(gè)指定日期Time對(duì)象,Date()函數(shù)的簽名如下:

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

可以看到,調(diào)用函數(shù)Date()需要的參數(shù)可以精確到納秒:

fmt.Println(time.Date(2023,?time.Month(1),?2,?2,?2,?2,?0,?time.Local))

Parse

有時(shí)候我們接收用戶與時(shí)間相關(guān)請(qǐng)求參數(shù)時(shí),得到往往是一個(gè)時(shí)間格式的字符串,比如2023-06-02 10:00:00

t,?_?:=?time.Parse(time.DateTime,?"2023-06-02?10:00:00")
fmt.Println(t.Unix())

格式化時(shí)間戳

通常我們都是以時(shí)間戳的形式將時(shí)間保存在數(shù)據(jù)庫中,當(dāng)需要展示給用戶時(shí),則需要將時(shí)間戳格式化,Go語言支持秒,毫秒,微秒等時(shí)間戳的格式:

t?:=?time.Unix(1685700000,?0)
fmt.Println(t.Format(time.DateTime))

按時(shí)區(qū)顯示時(shí)間

有時(shí)候我們需要根據(jù)用戶所在時(shí)區(qū)顯示對(duì)應(yīng)的時(shí)間,在time包里,用Location結(jié)構(gòu)體表示一個(gè)時(shí)區(qū)對(duì)象,可以使用time包的LoadLocation()函數(shù)加載本地預(yù)先定義的時(shí)區(qū)數(shù)據(jù)

loc1,?err?:=?time.LoadLocation("Asia/Shanghai")
loc2,?err?:=?time.LoadLocation("PRC")

也可以使用FixeZone函數(shù)自己定義一個(gè)時(shí)區(qū)名稱:

?beijing?:=?time.FixedZone("Beijing",?+8*60*60)

有了Location對(duì)象,我們可以將顯示不同時(shí)區(qū)的時(shí)間:

package?main
import?(
?"fmt"
?"time"
)
func?main()?{
?ch,?_?:=?time.LoadLocation("PRC")
?t?:=?time.Date(2023,?time.June,?19,?11,?43,?0,?0,?ch)
?fmt.Println("中國時(shí)間是:",?t)
?jp?:=?time.FixedZone("jp",?+(9?*?60?*?60))
?t2?:=?t.In(jp)
?fmt.Println("日本時(shí)間是:",?t2)
}

time.Duration

如果要比較兩個(gè)時(shí)刻之間的時(shí)間長(zhǎng)度,可以調(diào)用Time的Sub方法,這個(gè)函數(shù)可以計(jì)算兩個(gè)時(shí)刻的長(zhǎng)度,并返回一個(gè)表示時(shí)間段的Duration結(jié)構(gòu)體:

package?main
import?(
?"fmt"
?"time"
)
func?main()?{
?t1,?_?:=?time.Parse(time.DateTime,?"2023-06-01?16:00:00")
?t2,?_?:=?time.Parse(time.DateTime,?"2023-06-02?16:00:00")
?d?:=?t2.Sub(t1)
?fmt.Println(d)
}

上面例子運(yùn)行結(jié)果為:

24h0m0s

當(dāng)我們想在某個(gè)時(shí)刻上疊加一個(gè)時(shí)間段時(shí),也可以調(diào)用time包的ParseDuration()函數(shù)構(gòu)建一個(gè)Duration結(jié)構(gòu)體并傳給Time結(jié)構(gòu)體的Add()方法。

ParseDuration()函數(shù)的參數(shù)為一個(gè)表示時(shí)間段的字符串,比如1h2days

package?main
import?(
?"fmt"
?"time"
)
func?main()?{
?d,?_?:=?time.ParseDuration("4h")
?t?:=?time.Now().Add(d)
?fmt.Println(t)
}

小結(jié)

Go的標(biāo)準(zhǔn)庫time包提供了完整操作對(duì)時(shí)間的格式式和測(cè)量等功能,雖然用法與其他編程語言稍有差異,但是也非常容易掌握。

以上就是Go語言時(shí)間相關(guān)操作合集(超詳細(xì))的詳細(xì)內(nèi)容,更多關(guān)于Go時(shí)間操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • go語言算法題解二叉樹的最小深度

    go語言算法題解二叉樹的最小深度

    這篇文章主要為大家介紹了go語言算法題解二叉樹的最小深度示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • Golang 統(tǒng)計(jì)字符串字?jǐn)?shù)的方法示例

    Golang 統(tǒng)計(jì)字符串字?jǐn)?shù)的方法示例

    本篇文章主要介紹了Golang 統(tǒng)計(jì)字符串字?jǐn)?shù)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-05-05
  • 手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    手把手教你用VS?code快速搭建一個(gè)Golang項(xiàng)目

    Go語言是采用UTF8編碼的,理論上使用任何文本編輯器都能做Go語言開發(fā),下面這篇文章主要給大家介紹了關(guān)于使用VS?code快速搭建一個(gè)Golang項(xiàng)目的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Go語言代碼格式化的技巧分享

    Go語言代碼格式化的技巧分享

    在Go語言的開發(fā)過程中,代碼格式化是一個(gè)看似細(xì)微卻至關(guān)重要的環(huán)節(jié),良好的代碼格式化不僅能提升代碼的可讀性,還能促進(jìn)團(tuán)隊(duì)協(xié)作,減少因代碼風(fēng)格差異引發(fā)的問題,Go在代碼格式化方面有著獨(dú)特的處理方式,,接下來,讓我們深入探究Go語言的代碼格式化技巧
    2025-06-06
  • Go語言中的range用法實(shí)例分析

    Go語言中的range用法實(shí)例分析

    這篇文章主要介紹了Go語言中的range用法,實(shí)例分析了range的功能與使用技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-02-02
  • GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    GO將mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf的操作方法

    這篇文章主要介紹了go如何優(yōu)雅地將?mysql?中?decimal?數(shù)據(jù)類型映射到?protobuf,本文主要展示一下在 protobuf中 float與double的一個(gè)區(qū)別,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 一文告訴你大神是如何學(xué)習(xí)Go語言之make和new

    一文告訴你大神是如何學(xué)習(xí)Go語言之make和new

    當(dāng)我們想要在 Go 語言中初始化一個(gè)結(jié)構(gòu)時(shí),其實(shí)會(huì)使用到兩個(gè)完全不同的關(guān)鍵字,也就是 make 和 new,同時(shí)出現(xiàn)兩個(gè)用于『初始化』的關(guān)鍵字對(duì)于初學(xué)者來說可能會(huì)感到非常困惑,不過它們兩者有著卻完全不同的作用,本文就和大家詳細(xì)講講
    2023-02-02
  • go語言通過結(jié)構(gòu)體生成json示例解析

    go語言通過結(jié)構(gòu)體生成json示例解析

    這篇文章主要為大家介紹了go語言通過結(jié)構(gòu)體生成json示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 一文帶你深入探索Golang操作mongodb的方法

    一文帶你深入探索Golang操作mongodb的方法

    這篇文章主要為大家詳細(xì)介紹了Golang操作mongodb的相關(guān)知識(shí),包括:初始化項(xiàng)目工程、容器方式安裝mongo和調(diào)試運(yùn)行和編譯運(yùn)行,感興趣的小伙伴可以了解一下
    2023-02-02
  • golang 的string與[]byte轉(zhuǎn)換方式

    golang 的string與[]byte轉(zhuǎn)換方式

    這篇文章主要介紹了golang 的string與[]byte轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04

最新評(píng)論

龙江县| 贺兰县| 河北区| 梅河口市| 本溪市| 酉阳| 仙居县| 乌拉特前旗| 环江| 和龙市| 大邑县| 桐梓县| 隆德县| 灯塔市| 北川| 张家界市| 宁远县| 沧源| 凌源市| 民和| 运城市| 玛纳斯县| 绥宁县| 长葛市| 海林市| 平湖市| 重庆市| 大丰市| 巨野县| 马尔康县| 平果县| 南开区| 景泰县| 郸城县| 昌乐县| 舟曲县| 出国| 防城港市| 瑞金市| 黎平县| 舒兰市|