Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Golang time.Duration

详解Golang time包中的time.Duration类型

作者:路多辛

在日常开发过程中,会频繁遇到对时间进行操作的场景,使用 Golang 中的 time 包可以很方便地实现对时间的相关操作,本文讲解一下 time 包中的 time.Duration 类型,需要的朋友可以参考下

time.Duration

time.Duration 类型是一个有符号的 int64 类型,以纳秒为单位,用来表示两个时间点之间的时长。类型定义如下:

type Duration int64

拥有的方法如下:

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
}
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))
}
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文