详解Golang time包中的time.Duration类型
作者:路多辛
在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作,本文讲解一下 time 包中的 time.Duration 类型,需要的朋友可以参考下
time.Duration
time.Duration 类型是一个有符号的 int64 类型,以纳秒为单位,用来表示两个时间点之间的时长。类型定义如下:
type Duration int64
拥有的方法如下:
- func (d Duration) Hours() float64,返回持续的时间,以小时为单位。
- func (d Duration) Minutes() float64,返回持续的时间,以分钟为单位。
- func (d Duration) Seconds() float64,返回持续的时间,以秒为单位。
- func (d Duration) Milliseconds() int64,返回持续的时间,以毫秒为单位。
- func (d Duration) Microseconds() int64,返回持续的时间,以微秒为单位。
- func (d Duration) Nanoseconds() int64,返回持续的时间,以纳秒为单位。
- func (d Duration) String() string,返回一个字符串类型的持续的时间,格式为 “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 的最接近倍数的结果。通过示例理解一下:
package main import ( "fmt" "time" ) func main() { a := time.Duration(10) * time.Minute // 结果为 10,10 正好是 1 的整数倍 fmt.Println(a.Round(time.Duration(1) * time.Minute)) // 结果为 9,3 的 3 倍是 9,3 的 4 倍是 12,9 和 10 离得更近 fmt.Println(a.Round(time.Duration(3) * time.Minute)) // 结果为 12,4 的 2 倍是 8,4 的 3 倍是 12,距离一样近往上入 fmt.Println(a.Round(time.Duration(4) * time.Minute)) // 结果为 10,10 正好是 5 的整数倍 fmt.Println(a.Round(time.Duration(5) * time.Minute)) // 结果为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 最近整数倍。通过示例理解一下:
package main import ( "fmt" "time" ) func main() { a := time.Duration(10) * time.Minute // 结果为 10,10 正好是 1 的整数倍 fmt.Println(a.Truncate(time.Duration(1) * time.Minute)) // 结果为 9,3 的 3 倍是 9,最接近 10 fmt.Println(a.Truncate(time.Duration(3) * time.Minute)) // 结果为 8,4 的 2 倍是 8,最接近 10 fmt.Println(a.Truncate(time.Duration(4) * time.Minute)) // 结果为 10,10 正好是 5 的整数倍 fmt.Println(a.Truncate(time.Duration(5) * time.Minute)) // 结果为 6,6 的 1 倍是 6,最接近 10 fmt.Println(a.Truncate(time.Duration(6) * time.Minute)) // 结果为 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!