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

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

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

前言

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

時(shí)間類型

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

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

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

Location和time zone

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

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

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

	// 如果當(dāng)前系統(tǒng)有時(shí)區(qū)數(shù)據(jù)庫(kù),則可以加載一個(gè)位置得到對(duì)應(yīng)的時(shí)區(qū)
	// 例如,加載紐約所在的時(shí)區(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()
	// 加載上海所在的時(shí)區(qū)
	//shanghai, err := time.LoadLocation("Asia/Shanghai") // UTC+08:00
	// 加載東京所在的時(shí)區(qū)
	//tokyo, err := time.LoadLocation("Asia/Tokyo") // UTC+09:00

	// 創(chuàng)建時(shí)間對(duì)象需要指定位置。常用的位置是 time.Local(當(dāng)?shù)貢r(shí)間) 和 time.UTC(UTC時(shí)間)。
	//timeInLocal := time.Date(2009, 1, 1, 20, 0, 0, 0, time.Local)  // 系統(tǒng)本地時(shí)間
	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)

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

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

時(shí)間間隔

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

Add

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

sub

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

func (t Time) Sub(u Time) Duration

Before

如果t代表的時(shí)間點(diǎn)在u之前,返回真;否則返回假

func (t Time) Before(u Time) bool

After

如果t代表的時(shí)間點(diǎn)在u之后,返回真;否則返回假。

func (t Time) After(u Time) bool

定時(shí)器

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

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

時(shí)間格式化

time.Format函數(shù)能夠?qū)⒁粋€(gè)時(shí)間對(duì)象格式化輸出為指定布局的文本表示形式,需要注意的是 Go 語(yǔ)言中時(shí)間格式化的布局不是常見的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:時(shí)(H)
04:分(M)
05:秒(S)`

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

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

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

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

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

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

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

// parseDemo 指定時(shí)區(qū)解析時(shí)間
func parseDemo() {
	// 在沒有時(shí)區(qū)指示符的情況下,time.Parse 返回UTC時(shí)間
	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

	// 在有時(shí)區(qū)指示符的情況下,time.Parse 返回對(duì)應(yīng)時(shí)區(qū)的時(shí)間表示
	// 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語(yǔ)言中time包的各種函數(shù)總結(jié)的文章就介紹到這了,更多相關(guān)go語(yǔ)言time包內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解Go語(yǔ)言中select語(yǔ)句的常見用法

    詳解Go語(yǔ)言中select語(yǔ)句的常見用法

    這篇文章主要是來(lái)和大家介紹一下Go語(yǔ)言中select?語(yǔ)句的常見用法,以及在使用過(guò)程中的注意事項(xiàng),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-07-07
  • 淺談GoLang幾種讀文件方式的比較

    淺談GoLang幾種讀文件方式的比較

    這篇文章主要介紹了淺談GoLang幾種讀文件方式的比較,一般來(lái)說(shuō)常用的有三種。使用Read加上buffer,使用bufio庫(kù)和ioutil 庫(kù),非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2019-01-01
  • 關(guān)于golang 字符串 int uint int64 uint64 互轉(zhuǎn)問(wèn)題

    關(guān)于golang 字符串 int uint int64 uint64&

    這篇文章主要介紹了golang 字符串 int uint int64 uint64 互轉(zhuǎn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • 一文詳解Golang中的基礎(chǔ)語(yǔ)法

    一文詳解Golang中的基礎(chǔ)語(yǔ)法

    這篇文章主要為大家詳細(xì)介紹了Golang中基礎(chǔ)語(yǔ)法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Golang有一定的幫助,感興趣的可以了解一下
    2023-03-03
  • Go語(yǔ)言空白表示符_的實(shí)例用法

    Go語(yǔ)言空白表示符_的實(shí)例用法

    在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于Go語(yǔ)言空白表示符_的實(shí)例用法,有興趣的朋友們可以學(xué)習(xí)參考下。
    2021-07-07
  • go語(yǔ)言實(shí)現(xiàn)處理表單輸入

    go語(yǔ)言實(shí)現(xiàn)處理表單輸入

    本文給大家分享的是一個(gè)使用go語(yǔ)言實(shí)現(xiàn)處理表單輸入的實(shí)例代碼,非常的簡(jiǎn)單,僅僅是實(shí)現(xiàn)了用戶名密碼的驗(yàn)證,有需要的小伙伴可以自由擴(kuò)展下。
    2015-03-03
  • 深入了解Golang中reflect反射的使用

    深入了解Golang中reflect反射的使用

    這篇文章主要介紹了深入了解Golang中reflect反射的使用,Go語(yǔ)言中的反射是一種機(jī)制,可以在運(yùn)行時(shí)動(dòng)態(tài)地獲取類型信息和操作對(duì)象,以及調(diào)用對(duì)象的方法和屬性等,需要詳細(xì)了解可以參考下文
    2023-05-05
  • Golang無(wú)限緩存channel的設(shè)計(jì)與實(shí)現(xiàn)解析

    Golang無(wú)限緩存channel的設(shè)計(jì)與實(shí)現(xiàn)解析

    這篇文章主要為大家介紹了Golang無(wú)限緩存channel的設(shè)計(jì)與實(shí)現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐

    Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐

    這篇文章主要為大家介紹了Go垃圾回收提升內(nèi)存管理效率優(yōu)化最佳實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Go語(yǔ)言實(shí)現(xiàn)遍歷文件夾

    Go語(yǔ)言實(shí)現(xiàn)遍歷文件夾

    這篇文章主要為大家詳細(xì)介紹了Go語(yǔ)言實(shí)現(xiàn)遍歷文件夾的相關(guān)方法,文中的示例代碼講解詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴可以了解一下
    2023-05-05

最新評(píng)論