Go 标准库 time 包之 Duration 类型
从前面章节中我们知道,Time
类型表示的是某个瞬间,或者说某个时刻,比如现在的 2018 年 8 月 28 日 20:45:50 秒。如果要表示持续时间,那么就必须要用到 Duration
这个类型。
Duration
类型
Duration
类型用于表示两个时刻 ( Time
) 之间经过的时间,以 纳秒 ( ns ) 为单位。
1 纳秒等于一秒的十亿分之一,即等于 10 的负 9 次方秒 ( 1 ns = 10-9 s)
我们先看看看 Duration
类型的定义
type Duration int64
从定义上可以知道,Duration
结构其实是 int64
的别名,这样能表示的持续时间大概是 299
年
package main const INT64_MAX = 1<<63 - 1 func main() { println("Duration 能表示的持续时间的最大值为:") println(INT64_MAX / (1000000000 * 86400 * 365)) }
输出结果为
Duration 能表示的持续时间的最大值为: 292
范例
下面的范例演示了如何使用 Go 语言计算两个时间的间隔
package main import ( "fmt" "time" ) const UINT32_MAX uint32 = ^uint32(0) func main() { var i uint32 t0 := time.Now() // 空循环 uint32 的最大值次数 for i = 0; i < UINT32_MAX; i += 1 { } t1 := time.Now() fmt.Printf("The loop took %v to run.\n", t1.Sub(t0)) }
运行结果如下
The loop took 2.279989986s to run.
Duration
类型方法
下表列出了 Duration
类型的方法
方法 | 说明 |
---|---|
Hours() float64 | 返回持续时间 d 是 小时的多少倍 |
Minutes() float64 | 返回持续时间 d 是 1 分钟 ( 60 秒 ) 的多少倍 |
Nanoseconds() int64 | 返回持续时间 d 是 1 纳秒的多少倍 |
Round(m Duration) Duration | 采用四舍五入的方式返回一个持续时间 d 是另一个持续时间 m 的多少倍 ,如果 m 小于 0 ,则直接返回原值 |
Seconds() float64 | 返回持续时间 d 是 1 秒的多少倍 |
String() string | 以 「 72h3m0.5s 」的格式返回持续时间 d 的字符串表现形式 |
Truncate(m Duration) Duration | 返回一个持续时间 d 是另一个持续时间 m 的多少倍,如果 m 小于 0 ,则直接返回原值 |
Duration
的构造方法
除了 Duration
自身的两个方法 Truncate()
和 Round()
能够生成一个新的 Duration
对象外,time
包还提供了额外的三个方法从时刻 Time
中创建 Duration
对象
方法 | 说明 |
---|---|
ParseDuration(s string) (Duration, error) | 将一个 「 72h3m0.5s 」格式的字符串转换为一个 Duration 对象 |
Since(t Time) Duration | 返回一个时刻 ( Time t ) 到当前时间所经过的持续时间 |
Until(t Time) Duration | 返回当前时间到另一个时刻 ( Time t ) 需要经过的持续时间 |
结束语
其实,还好,Duration
还是比较好理解的。关于方法的更多说明,我会在将所有的类型解释完毕后,一一完善,尤其是它们的范例