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 还是比较好理解的。关于方法的更多说明,我会在将所有的类型解释完毕后,一一完善,尤其是它们的范例

关于   |   FAQ   |   我们的愿景   |   广告投放   |  博客

  简单教程,简单编程 - IT 入门首选站

Copyright © 2013-2022 简单教程 twle.cn All Rights Reserved.