建筑模型设计网站建设,jsp网站开发好书,用wordpress数据展示,怎么以公司名义注册邮箱在日常开发过程中#xff0c;会频繁遇到对时间进行操作的场景#xff0c;使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 time 包#xff0c;本文讲解一下 time 包中的 time.Duration 类型。
time.Duration
time.Duration 类型是…在日常开发过程中会频繁遇到对时间进行操作的场景使用 Golang 中的 time 包可以很方便地实现对时间的相关操作。接下来的几篇文章会详细讲解 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 mainimport (fmttime
)func main() {a : time.Duration(3) * time.Hourfmt.Println(a.Hours()) // 3fmt.Println(a.Minutes()) // 180fmt.Println(a.Seconds()) //10800fmt.Println(a.Milliseconds()) //10800000fmt.Println(a.Microseconds()) //10800000000fmt.Println(a.Nanoseconds()) //10800000000000fmt.Println(a.String()) //3h0m0s
}
func (d Duration) Round(m Duration) Duration返回将 d 四舍五入到 m 的最接近倍数的结果。通过示例理解一下
package mainimport (fmttime
)func main() {a : time.Duration(10) * time.Minute// 结果为 1010 正好是 1 的整数倍fmt.Println(a.Round(time.Duration(1) * time.Minute))// 结果为 93 的 3 倍是 93 的 4 倍是 129 和 10 离得更近fmt.Println(a.Round(time.Duration(3) * time.Minute))// 结果为 124 的 2 倍是 84 的 3 倍是 12距离一样近往上入fmt.Println(a.Round(time.Duration(4) * time.Minute))// 结果为 1010 正好是 5 的整数倍fmt.Println(a.Round(time.Duration(5) * time.Minute))// 结果为12 6 的 1 倍是 66 的 2 倍是 1210 离 12 更近fmt.Println(a.Round(time.Duration(6) * time.Minute))
}
func (d Duration) Truncate(m Duration) Duration用于将 d 截断到 m 最近整数倍。通过示例理解一下
package mainimport (fmttime
)func main() {a : time.Duration(10) * time.Minute// 结果为 1010 正好是 1 的整数倍fmt.Println(a.Truncate(time.Duration(1) * time.Minute))// 结果为 93 的 3 倍是 9最接近 10fmt.Println(a.Truncate(time.Duration(3) * time.Minute))// 结果为 84 的 2 倍是 8最接近 10fmt.Println(a.Truncate(time.Duration(4) * time.Minute))// 结果为 1010 正好是 5 的整数倍fmt.Println(a.Truncate(time.Duration(5) * time.Minute))// 结果为 66 的 1 倍是 6最接近 10fmt.Println(a.Truncate(time.Duration(6) * time.Minute))// 结果为 011 的 1 倍是11大于了 10fmt.Println(a.Truncate(time.Duration(11) * time.Minute))
}
加减法运算
因为 time.Duration 表示的是时间段可以对 time.Duration 类型的值进行加减法运算例如
package mainimport (fmttime
)func main() {a : time.Duration(10) * time.Minuteb : time.Duration(10) * time.Secondfmt.Println(a b)fmt.Println(a - b)
}