詳解Golang 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)
}到此這篇關(guān)于詳解Golang time包中的time.Duration類型的文章就介紹到這了,更多相關(guān)Golang time.Duration內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
GO使用socket和channel實現(xiàn)簡單控制臺聊天室
今天小編給大家分享一個簡單的聊天室功能,聊天室主要功能是用戶可以加入離開聊天室,實現(xiàn)思路也很簡單明了,下面小編給大家?guī)砹送暾a,感興趣的朋友跟隨小編一起看看吧2021-12-12
Go語言中io.Reader和io.Writer的詳解與實現(xiàn)
在Go語言的實際編程中,幾乎所有的數(shù)據(jù)結(jié)構(gòu)都圍繞接口展開,接口是Go語言中所有數(shù)據(jù)結(jié)構(gòu)的核心。在使用Go語言的過程中,無論你是實現(xiàn)web應(yīng)用程序,還是控制臺輸入輸出,又或者是網(wǎng)絡(luò)操作,不可避免的會遇到IO操作,使用到io.Reader和io.Writer接口。下面來詳細看看。2016-09-09
golang使用OpenTelemetry實現(xiàn)跨服務(wù)全鏈路追蹤詳解
這篇文章主要為大家介紹了golang使用OpenTelemetry實現(xiàn)跨服務(wù)全鏈路追蹤詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-09-09

