詳解Golang time包中的time.Duration類型
time.Duration
time.Duration 類型是一個(gè)有符號(hào)的 int64 類型,以納秒為單位,用來(lái)表示兩個(gè)時(shí)間點(diǎn)之間的時(shí)長(zhǎng)。類型定義如下:
type Duration int64
擁有的方法如下:
- func (d Duration) Hours() float64,返回持續(xù)的時(shí)間,以小時(shí)為單位。
- func (d Duration) Minutes() float64,返回持續(xù)的時(shí)間,以分鐘為單位。
- func (d Duration) Seconds() float64,返回持續(xù)的時(shí)間,以秒為單位。
- func (d Duration) Milliseconds() int64,返回持續(xù)的時(shí)間,以毫秒為單位。
- func (d Duration) Microseconds() int64,返回持續(xù)的時(shí)間,以微秒為單位。
- func (d Duration) Nanoseconds() int64,返回持續(xù)的時(shí)間,以納秒為單位。
- func (d Duration) String() string,返回一個(gè)字符串類型的持續(xù)的時(shí)間,格式為 “72h3m0.5s”。示例如下:
package main import ( "fmt" "time" ) func main() { a := time.Duration(3) * time.Hour fmt.Println(a.Hours()) // 3 fmt.Println(a.Minutes()) // 180 fmt.Println(a.Seconds()) //10800 fmt.Println(a.Milliseconds()) //10800000 fmt.Println(a.Microseconds()) //10800000000 fmt.Println(a.Nanoseconds()) //10800000000000 fmt.Println(a.String()) //3h0m0s }
- func (d Duration) Round(m Duration) Duration,返回將 d 四舍五入到 m 的最接近倍數(shù)的結(jié)果。通過(guò)示例理解一下:
package main import ( "fmt" "time" ) func main() { a := time.Duration(10) * time.Minute // 結(jié)果為 10,10 正好是 1 的整數(shù)倍 fmt.Println(a.Round(time.Duration(1) * time.Minute)) // 結(jié)果為 9,3 的 3 倍是 9,3 的 4 倍是 12,9 和 10 離得更近 fmt.Println(a.Round(time.Duration(3) * time.Minute)) // 結(jié)果為 12,4 的 2 倍是 8,4 的 3 倍是 12,距離一樣近往上入 fmt.Println(a.Round(time.Duration(4) * time.Minute)) // 結(jié)果為 10,10 正好是 5 的整數(shù)倍 fmt.Println(a.Round(time.Duration(5) * time.Minute)) // 結(jié)果為12, 6 的 1 倍是 6,6 的 2 倍是 12,10 離 12 更近 fmt.Println(a.Round(time.Duration(6) * time.Minute)) }
- func (d Duration) Truncate(m Duration) Duration,用于將 d 截?cái)嗟?m 最近整數(shù)倍。通過(guò)示例理解一下:
package main import ( "fmt" "time" ) func main() { a := time.Duration(10) * time.Minute // 結(jié)果為 10,10 正好是 1 的整數(shù)倍 fmt.Println(a.Truncate(time.Duration(1) * time.Minute)) // 結(jié)果為 9,3 的 3 倍是 9,最接近 10 fmt.Println(a.Truncate(time.Duration(3) * time.Minute)) // 結(jié)果為 8,4 的 2 倍是 8,最接近 10 fmt.Println(a.Truncate(time.Duration(4) * time.Minute)) // 結(jié)果為 10,10 正好是 5 的整數(shù)倍 fmt.Println(a.Truncate(time.Duration(5) * time.Minute)) // 結(jié)果為 6,6 的 1 倍是 6,最接近 10 fmt.Println(a.Truncate(time.Duration(6) * time.Minute)) // 結(jié)果為 0,11 的 1 倍是11,大于了 10 fmt.Println(a.Truncate(time.Duration(11) * time.Minute)) }
加減法運(yùn)算
因?yàn)?nbsp;time.Duration 表示的是時(shí)間段,可以對(duì) time.Duration 類型的值進(jìn)行加減法運(yùn)算,例如:
package main import ( "fmt" "time" ) func main() { a := time.Duration(10) * time.Minute b := time.Duration(10) * time.Second fmt.Println(a + b) fmt.Println(a - b) }
到此這篇關(guān)于詳解Golang time包中的time.Duration類型的文章就介紹到這了,更多相關(guān)Golang time.Duration內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Go defer與time.sleep的使用與區(qū)別
- 詳解Golang time包中的結(jié)構(gòu)體time.Ticker
- 詳解Golang time包中的結(jié)構(gòu)體time.Time
- Go?中?time.After?可能導(dǎo)致的內(nèi)存泄露問(wèn)題解析
- Golang time.Sleep()用法及示例講解
- go?time.Sleep睡眠指定時(shí)間實(shí)例詳解(小時(shí)級(jí)到納秒級(jí))
- 淺談golang 中time.After釋放的問(wèn)題
- 解決Golang time.Parse和time.Format的時(shí)區(qū)問(wèn)題
- go語(yǔ)言time.After()的作用
相關(guān)文章
Golang如何調(diào)用windows下的dll動(dòng)態(tài)庫(kù)中的函數(shù)
這篇文章主要介紹了Golang如何調(diào)用windows下的dll動(dòng)態(tài)庫(kù)中的函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-05-05一文帶你了解Go語(yǔ)言實(shí)現(xiàn)的并發(fā)神庫(kù)conc
前幾天逛github發(fā)現(xiàn)了一個(gè)有趣的并發(fā)庫(kù)-conc,這篇文章將為大家詳細(xì)介紹一下這個(gè)庫(kù)的實(shí)現(xiàn),文中的示例代碼講解詳細(xì),感興趣的可以了解一下2023-01-01在Golang代碼中如何自動(dòng)生成版本號(hào)的方法示例
這篇文章主要給大家介紹了在Golang代碼中如何自動(dòng)生成版本號(hào)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-07-07Go語(yǔ)言提升開發(fā)效率的語(yǔ)法糖技巧分享
每門語(yǔ)言都有自己的語(yǔ)法糖,像java的語(yǔ)法糖就有方法變長(zhǎng)參數(shù)、拆箱與裝箱、枚舉、for-each等等,Go語(yǔ)言也不例外。本文就來(lái)介紹一些Go語(yǔ)言的語(yǔ)法糖,需要的可以參考一下2022-07-07