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

go語言中time包的各種函數(shù)總結(jié)

 更新時間:2023年04月15日 15:39:42   作者:西瓜味兒的柚子  
時間和日期是我們編程中經(jīng)常會用到的,下面這篇文章主要給大家介紹了關(guān)于go語言中time包的各種函數(shù)總結(jié)的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

前言

在我們開發(fā)的過程中,每個項目都需要時間這一類的函數(shù),此時,對time這個包的研究深度就顯得尤為重要,現(xiàn)在,對time包中的各種函數(shù)做出一個總結(jié),加深一些記憶,

時間類型

Go語言中,time.Time類型表示時間。我們可以通過time.Now函數(shù)獲取當前時間的對象,然后從時間對象中獲取到年,月,日,時,分,秒等信息,代碼如下

// timeDemo 時間對象的年月日時分秒
func timeDemo() {
	now := time.Now() // 獲取當前時間
	fmt.Printf("current time:%v\n", now)

	year := now.Year()     // 年
	month := now.Month()   // 月
	day := now.Day()       // 日
	hour := now.Hour()     // 小時
	minute := now.Minute() // 分鐘
	second := now.Second() // 秒
	fmt.Println(year, month, day, hour, minute, second)
}

Location和time zone

Go 語言中使用 location 來映射具體的時區(qū)。時區(qū)(Time Zone)是根據(jù)世界各國家與地區(qū)不同的經(jīng)度而劃分的時間定義,全球共分為24個時區(qū)。中國差不多跨5個時區(qū),但為了使用方便只用東八時區(qū)的標準時即北京時間為準。

下面的示例代碼中使用beijing來表示東八區(qū)8小時的偏移量,其中time.FixedZone和time.LoadLocation`這兩個函數(shù)則是用來獲取location信息。

// timezoneDemo 時區(qū)示例
func timezoneDemo() {
	// 中國沒有夏令時,使用一個固定的8小時的UTC時差。
	// 對于很多其他國家需要考慮夏令時。
	secondsEastOfUTC := int((8 * time.Hour).Seconds())
	// FixedZone 返回始終使用給定區(qū)域名稱和偏移量(UTC 以東秒)的 Location。
	beijing := time.FixedZone("Beijing Time", secondsEastOfUTC)

	// 如果當前系統(tǒng)有時區(qū)數(shù)據(jù)庫,則可以加載一個位置得到對應(yīng)的時區(qū)
	// 例如,加載紐約所在的時區(qū)
	newYork, err := time.LoadLocation("America/New_York") // UTC-05:00
	if err != nil {
		fmt.Println("load America/New_York location failed", err)
		return
	}
	fmt.Println()
	// 加載上海所在的時區(qū)
	//shanghai, err := time.LoadLocation("Asia/Shanghai") // UTC+08:00
	// 加載東京所在的時區(qū)
	//tokyo, err := time.LoadLocation("Asia/Tokyo") // UTC+09:00

	// 創(chuàng)建時間對象需要指定位置。常用的位置是 time.Local(當?shù)貢r間) 和 time.UTC(UTC時間)。
	//timeInLocal := time.Date(2009, 1, 1, 20, 0, 0, 0, time.Local)  // 系統(tǒng)本地時間
	timeInUTC := time.Date(2009, 1, 1, 12, 0, 0, 0, time.UTC)
	sameTimeInBeijing := time.Date(2009, 1, 1, 20, 0, 0, 0, beijing)
	sameTimeInNewYork := time.Date(2009, 1, 1, 7, 0, 0, 0, newYork)

	// 北京時間(東八區(qū))比UTC早8小時,所以上面兩個時間看似差了8小時,但表示的是同一個時間
	timesAreEqual := timeInUTC.Equal(sameTimeInBeijing)
	fmt.Println(timesAreEqual)

	// 紐約(西五區(qū))比UTC晚5小時,所以上面兩個時間看似差了5小時,但表示的是同一個時間
	timesAreEqual = timeInUTC.Equal(sameTimeInNewYork)
	fmt.Println(timesAreEqual)
}

時間間隔

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

Add

func main() {
	now := time.Now()
	later := now.Add(time.Hour) // 當前時間加1小時后的時間
	fmt.Println(later)
}

sub

返回一個時間段t-u。如果結(jié)果超出了Duration可以表示的最大值/最小值,將返回最大值/最小值。要獲取時間點t-d(d為Duration),可以使用t.Add(-d)。

func (t Time) Sub(u Time) Duration

Before

如果t代表的時間點在u之前,返回真;否則返回假

func (t Time) Before(u Time) bool

After

如果t代表的時間點在u之后,返回真;否則返回假。

func (t Time) After(u Time) bool

定時器

使用time.Tick(時間間隔)來設(shè)置定時器,定時器的本質(zhì)上是一個通道(channel)。

unc tickDemo() {
	ticker := time.Tick(time.Second) //定義一個1秒間隔的定時器
	for i := range ticker {
		fmt.Println(i)//每秒都會執(zhí)行的任務(wù)
	}
}

時間格式化

time.Format函數(shù)能夠?qū)⒁粋€時間對象格式化輸出為指定布局的文本表示形式,需要注意的是 Go 語言中時間格式化的布局不是常見的Y-m-d H:M:S,而是使用 2006-01-02 15:04:05.000(記憶口訣為2006 1 2 3 4 5)。

其中:

2006:年(Y)
01:月(m)
02:日(d)
15:時(H)
04:分(M)
05:秒(S)`

// formatDemo 時間格式化
func formatDemo() {
	now := time.Now()
	// 格式化的模板為 2006-01-02 15:04:05

	// 24小時制
	fmt.Println(now.Format("2006-01-02 15:04:05.000 Mon Jan"))
	// 12小時制
	fmt.Println(now.Format("2006-01-02 03:04:05.000 PM Mon Jan"))

	// 小數(shù)點后寫0,因為有3個0所以格式化輸出的結(jié)果也保留3位小數(shù)
	fmt.Println(now.Format("2006/01/02 15:04:05.000")) // 2022/02/27 00:10:42.960
	// 小數(shù)點后寫9,會省略末尾可能出現(xiàn)的0
	fmt.Println(now.Format("2006/01/02 15:04:05.999")) // 2022/02/27 00:10:42.96

	// 只格式化時分秒部分
	fmt.Println(now.Format("15:04:05"))
	// 只格式化日期部分
	fmt.Println(now.Format("2006.01.02"))
}

時間格式化的時間

對于從文本的時間表示中解析出時間對象,time包中提供了time.Parse和time.ParseInLocation兩個函數(shù)。

其中time.Parse在解析時不需要額外指定時區(qū)信息。

// parseDemo 指定時區(qū)解析時間
func parseDemo() {
	// 在沒有時區(qū)指示符的情況下,time.Parse 返回UTC時間
	timeObj, err := time.Parse("2006/01/02 15:04:05", "2022/10/05 11:25:20")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(timeObj) // 2022-10-05 11:25:20 +0000 UTC

	// 在有時區(qū)指示符的情況下,time.Parse 返回對應(yīng)時區(qū)的時間表示
	// RFC3339     = "2006-01-02T15:04:05Z07:00"
	timeObj, err = time.Parse(time.RFC3339, "2022-10-05T11:25:20+08:00")
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(timeObj) // 2022-10-05 11:25:20 +0800 CST

總結(jié)

到此這篇關(guān)于go語言中time包的各種函數(shù)總結(jié)的文章就介紹到這了,更多相關(guān)go語言time包內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • go中make用法及常見的一些坑

    go中make用法及常見的一些坑

    golang分配內(nèi)存主要有內(nèi)置函數(shù)new和make,下面這篇文章主要給大家介紹了關(guān)于go中make用法及常見的一些坑,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Golang cron 定時器和定時任務(wù)的使用場景

    Golang cron 定時器和定時任務(wù)的使用場景

    Ticker是一個周期觸發(fā)定時的計時器,它會按照一個時間間隔往channel發(fā)送系統(tǒng)當前時間,而channel的接收者可以以固定的時間間隔從channel中讀取事件,這篇文章主要介紹了Golang cron 定時器和定時任務(wù),需要的朋友可以參考下
    2022-09-09
  • Go語言中slice的用法實例分析

    Go語言中slice的用法實例分析

    這篇文章主要介紹了Go語言中slice的用法,實例分析了slice的功能及使用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • go mod 使用舊版本 版本號指定方式

    go mod 使用舊版本 版本號指定方式

    這篇文章主要介紹了go mod 使用舊版本 版本號指定方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-05-05
  • 學(xué)習(xí)使用Go反射的用法示例

    學(xué)習(xí)使用Go反射的用法示例

    這篇文章主要介紹了學(xué)習(xí)使用Go反射的用法示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • Golang六個常用接口的使用總結(jié)

    Golang六個常用接口的使用總結(jié)

    在這篇文章中,小編來帶大家學(xué)習(xí)幾個Go標準庫的接口,看看Go標準庫是如何定義接口,以加深對Go語言接口的理解,感興趣的小伙伴快跟隨小編一起了解一下吧
    2023-07-07
  • 一文初探Go語言中的reflect反射包

    一文初探Go語言中的reflect反射包

    這篇文章主要和大家分享一下Go語言中的reflect反射包,文中的示例代碼講解詳細,對我們學(xué)習(xí)Go語言有一定的幫助,需要的小伙伴可以參考一下
    2022-12-12
  • MacOS中 VSCode 安裝 GO 插件失敗問題的快速解決方法

    MacOS中 VSCode 安裝 GO 插件失敗問題的快速解決方法

    這篇文章主要介紹了MacOS中 VSCode 安裝 GO 插件失敗問題的快速解決方法,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-05-05
  • 詳解golang開發(fā)中http請求redirect的問題

    詳解golang開發(fā)中http請求redirect的問題

    這篇文章主要介紹了詳解golang開發(fā)中http請求redirect的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Go語言題解LeetCode455分發(fā)餅干示例詳解

    Go語言題解LeetCode455分發(fā)餅干示例詳解

    這篇文章主要為大家介紹了Go語言題解LeetCode455分發(fā)餅干示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12

最新評論

云龙县| 姚安县| 扎鲁特旗| 长丰县| 双流县| 宜宾县| 武陟县| 休宁县| 建水县| 南城县| 清河县| 元谋县| 陕西省| 阜康市| 禄丰县| 崇信县| 东安县| 交口县| 合山市| 徐水县| 开封市| 杭锦旗| 涪陵区| 沁源县| 金乡县| 格尔木市| 罗山县| 福海县| 无为县| 定远县| 肇东市| 栾城县| 乐平市| 宿迁市| 大港区| 清镇市| 娱乐| 庆元县| 论坛| 苏尼特左旗| 澜沧|