日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Go語(yǔ)言基礎(chǔ)之Time包詳解

 前言

一寸光陰一寸金,時(shí)間難買寸光陰,時(shí)間,是個(gè)多么重要的東西。

同樣,在我們的編程中,時(shí)間也依然占據(jù)著很大的一部分。

就像淘寶,客戶下單需要記錄時(shí)間,發(fā)貨了需要記錄時(shí)間,保質(zhì)期多久需要推算時(shí)間,等等等等。

那我們一起來看看Go中是如何操作時(shí)間叭!

time.Now()

time.Now()返回的是一個(gè)Time類型。

相關(guān)代碼如下

 
 
 
 
  1. func main() {
  2.     var nowTime = time.Now()
  3.     fmt.Println(nowTime)
  4.     var year = nowTime.Year()     //當(dāng)前年份
  5.     var month = nowTime.Month()   //當(dāng)前月份
  6.     var day = nowTime.Day()       //今天幾號(hào)
  7.     var hour = nowTime.Hour()     //現(xiàn)在幾時(shí)
  8.     var Minute = nowTime.Minute() //現(xiàn)在幾分
  9.     var second = nowTime.Second() //現(xiàn)在幾秒
  10.     fmt.Printf("當(dāng)前年份:%v\n",year)
  11.     fmt.Printf("當(dāng)前月份:%v\n",month)
  12.     fmt.Printf("幾號(hào)了:%v\n",day)
  13.     fmt.Printf("幾時(shí):%v\n",hour)
  14.     fmt.Printf("幾分:%v\n",Minute)
  15.     fmt.Printf("幾秒:%v\n",second)
  16. }

執(zhí)行結(jié)果

時(shí)間戳

時(shí)間戳:從北京時(shí)間1970年1月1日8點(diǎn)到現(xiàn)在時(shí)間的秒數(shù),是一個(gè)int64類型。

相關(guān)代碼

 
 
 
 
  1. func main() {
  2.     var nowTime = time.Now()
  3.     var timestampSecond = nowTime.Unix()
  4.     fmt.Println(timestampSecond)
  5. }

執(zhí)行結(jié)果

到目前為止已經(jīng)有1603698727秒了,時(shí)間不等人吶!

納秒時(shí)間戳

一般情況下我們使用的都是秒,但是時(shí)間戳還可以返回成納秒,用的不多,了解就好。

代碼

 
 
 
 
  1. func main() {
  2.     var nowTime = time.Now()
  3.     var timestampNano = nowTime.UnixNano()
  4.     fmt.Println(timestampNano)
  5. }

執(zhí)行結(jié)果

時(shí)間戳轉(zhuǎn)Time

有時(shí)候別人給我們的是時(shí)間戳,我們需要反著轉(zhuǎn)以下,時(shí)間戳->時(shí)間類型。

需要用到的是time.Unix。

代碼

 
 
 
 
  1. func main() {
  2.     //時(shí)間戳
  3.     var timestampSecond int64 = 1603698727
  4.     //轉(zhuǎn)換為time對(duì)象
  5.     var timeObj = time.Unix(timestampSecond, 0)
  6.     var year = timeObj.Year()     //當(dāng)前年份
  7.     var month = timeObj.Month()   //當(dāng)前月份
  8.     var day = timeObj.Day()       //今天幾號(hào)
  9.     var hour = timeObj.Hour()     //現(xiàn)在幾時(shí)
  10.     var Minute = timeObj.Minute() //現(xiàn)在幾分
  11.     var second = timeObj.Second() //現(xiàn)在幾秒
  12.     fmt.Printf("年份:%v\n", year)
  13.     fmt.Printf("月份:%v\n", month)
  14.     fmt.Printf("幾號(hào):%v\n", day)
  15.     fmt.Printf("幾時(shí):%v\n", hour)
  16.     fmt.Printf("幾分:%v\n", Minute)
  17.     fmt.Printf("幾秒:%v\n", second)
  18. }

執(zhí)行效果

時(shí)間+

很多時(shí)候,我們拿到一個(gè)時(shí)間,我們需要向前或者向后推算一個(gè)月,或者幾個(gè)小時(shí),這就屬于時(shí)間+。

在Go中,時(shí)間推算有倆函數(shù),一個(gè)是Add,一個(gè)是AddDate,分別是+小時(shí)和+天數(shù)。

Add

代碼

Add最大單位是小時(shí),只能+小時(shí)

 
 
 
 
  1. func main() {
  2.     //當(dāng)前時(shí)間
  3.     nowTime := time.Now()
  4.     fmt.Println("當(dāng)前時(shí)間:",nowTime)
  5.     time1 := nowTime.Add(time.Hour)
  6.     fmt.Println("加一個(gè)小時(shí)時(shí)間:", time1)
  7.     time2 := nowTime.Add( time.Hour*2)
  8.     fmt.Println("加二個(gè)小時(shí)時(shí)間:", time2)
  9. }

執(zhí)行結(jié)果

AddDate

AddDate就牛逼很多了,有三個(gè)參數(shù),分別是年,月,日,根據(jù)需求加就行了。

代碼

 
 
 
 
  1. func main() {
  2.     //當(dāng)前時(shí)間
  3.     nowTime := time.Now()
  4.     fmt.Println("當(dāng)前時(shí)間:",nowTime)
  5.     month1 := nowTime.AddDate(0, 1, 1)
  6.     fmt.Println("加一個(gè)月時(shí)間:", month1)
  7.     month2 := nowTime.AddDate(0, 2, 1)
  8.     fmt.Println("加二個(gè)月時(shí)間:", month2)
  9. }

執(zhí)行結(jié)果

注意:上述不僅可以時(shí)間+,還可以時(shí)間-,前面加負(fù)號(hào)就可以了。

Sub

Sub通常用在計(jì)算某一段代碼執(zhí)行用了多久時(shí)間,最后時(shí)間-最開始時(shí)間=執(zhí)行時(shí)間。

代碼

 
 
 
 
  1. func main() {
  2.     //當(dāng)前時(shí)間
  3.     beginTime := time.Now()
  4.     //各種操作
  5.     time.Sleep(time.Second)
  6.     //結(jié)束時(shí)間
  7.     end_time := time.Now()
  8.     //計(jì)算時(shí)間
  9.     execTime := end_time.Sub(beginTime)
  10.     fmt.Println("執(zhí)行時(shí)間:", execTime)
  11. }

執(zhí)行結(jié)果

定時(shí)器

默認(rèn)的定時(shí)器挺Low的,只有最簡(jiǎn)單的功能,了解就好。

示例:每隔一秒執(zhí)行次相關(guān)代碼。

代碼

 
 
 
 
  1. func main() {
  2.     ticker := time.Tick(time.Second)
  3.     for i := range ticker {
  4.         fmt.Println(i)
  5. }
  6. }

執(zhí)行結(jié)果

時(shí)間格式化(time -> string)

Go語(yǔ)言的時(shí)間格式化,有點(diǎn)逗,跟其他語(yǔ)言都不一樣,沒有%Y,%M之類的寫法。

記住一個(gè)時(shí)間2006-01-02 15:04:05.000 Mon Jan/PM Mon Jan。

分別對(duì)應(yīng)年-月-日 時(shí):分:秒 24/12。

當(dāng)前,同其語(yǔ)言一樣,可以只格式化年-月-日等。

格式時(shí)間需要用到Format方法。

代碼

 
 
 
 
  1. func main() {
  2.     now := time.Now()
  3.     //年 月 日 時(shí) 分 秒
  4.     fmt.Println(now.Format("2006-01-02 15:04:05"))
  5.     //24小時(shí)
  6.     fmt.Println(now.Format("2006-01-02 15:04:05 Mon Jan"))
  7.     //12小時(shí)
  8.     fmt.Println(now.Format("2006-01-02 15:04:05 PM Mon Jan"))
  9.     //年月日
  10.     fmt.Println(now.Format("2006-01-02"))
  11. }

執(zhí)行結(jié)果

字符串格式化時(shí)間(string -> time)

將拿到的時(shí)間字符串轉(zhuǎn)成時(shí)間類型。

代碼

 
 
 
 
  1. func main() {
  2.     //時(shí)間字符串
  3.     timeString := "2020/09/01 14:01:45"
  4.     //加載時(shí)區(qū),亞洲/上海
  5.     location, err := time.LoadLocation("Asia/Shanghai")
  6.     if err != nil {
  7.         fmt.Println("時(shí)區(qū)加載失敗,", err)
  8.         return
  9. }
  10.     timeObj, err := time.ParseInLocation("2006/01/02 15:04:05", timeString, location)
  11.     if err != nil {
  12.         fmt.Println("時(shí)間轉(zhuǎn)換失敗,", err)
  13.         return
  14. }
  15.     fmt.Println(timeObj)
  16. }

執(zhí)行結(jié)果

總結(jié)

到這終于結(jié)束了,關(guān)于Go時(shí)間的操作基本就上述這么多。

當(dāng)然,這是自帶的包的功能有這么多,對(duì)于平常使用基本夠用。

其實(shí)主要重要的是Add和AddDate,時(shí)間 -> 格式化字符串,字符串 -> 時(shí)間,這些在平常中使用頻率最高。

如果在操作過程中有任何問題,記得下面留言,我們看到會(huì)第一時(shí)間解決問題。

如果你覺得文章還可以,記得點(diǎn)贊留言支持我們哈。感謝你的閱讀,有問題請(qǐng)記得在下方留言噢~

  本文轉(zhuǎn)載自微信公眾號(hào)「Go語(yǔ)言進(jìn)階學(xué)習(xí)」,可以通過以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系Go語(yǔ)言進(jìn)階學(xué)習(xí)公眾號(hào)。


網(wǎng)頁(yè)名稱:Go語(yǔ)言基礎(chǔ)之Time包詳解
文章位置:http://www.dlmjj.cn/article/djessss.html