詳解Golang time包中的time.Duration類型
更新時間:2023年07月28日 09:22:55 作者:路多辛
在日常開發(fā)過程中,會頻繁遇到對時間進行操作的場景,使用 Golang 中的 time 包可以很方便地實現(xiàn)對時間的相關操作,本文講解一下 time 包中的 time.Duration 類型,需要的朋友可以參考下
time.Duration
time.Duration 類型是一個有符號的 int64 類型,以納秒為單位,用來表示兩個時間點之間的時長。類型定義如下:
type Duration int64
擁有的方法如下:
- func (d Duration) Hours() float64,返回持續(xù)的時間,以小時為單位。
- func (d Duration) Minutes() float64,返回持續(xù)的時間,以分鐘為單位。
- func (d Duration) Seconds() float64,返回持續(xù)的時間,以秒為單位。
- func (d Duration) Milliseconds() int64,返回持續(xù)的時間,以毫秒為單位。
- func (d Duration) Microseconds() int64,返回持續(xù)的時間,以微秒為單位。
- func (d Duration) Nanoseconds() int64,返回持續(xù)的時間,以納秒為單位。
- func (d Duration) String() string,返回一個字符串類型的持續(xù)的時間,格式為 “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é)果。通過示例理解一下:
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 截斷到 m 最近整數(shù)倍。通過示例理解一下:
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)) }
加減法運算
因為 time.Duration 表示的是時間段,可以對 time.Duration 類型的值進行加減法運算,例如:
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) }
到此這篇關于詳解Golang time包中的time.Duration類型的文章就介紹到這了,更多相關Golang time.Duration內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)
這篇文章主要介紹了Golang如何調(diào)用windows下的dll動態(tài)庫中的函數(shù)方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-05-05一文帶你了解Go語言實現(xiàn)的并發(fā)神庫conc
前幾天逛github發(fā)現(xiàn)了一個有趣的并發(fā)庫-conc,這篇文章將為大家詳細介紹一下這個庫的實現(xiàn),文中的示例代碼講解詳細,感興趣的可以了解一下2023-01-01