当前位置: 首页 > 面试题库 >

time.Duration类型的微秒值转换为毫秒

孙星鹏
2023-03-14
问题内容

我正在使用golang的go-ping(https://github.com/sparrc/go-
ping
)库进行无特权的ICMP ping。

timeout := time.Second*1000
interval := time.Second
count := 5
host := p.ipAddr
pinger, cmdErr := ping.NewPinger(host)

pinger.Count = count
pinger.Interval = interval
pinger.Timeout = timeout
pinger.SetPrivileged(false)
pinger.Run()
stats := pinger.Statistics()

latency = stats.AvgRtt  // stats.AvgRtt is time.Duration type
jitter = stats.StdDevRtt// stats.StdDevRtt is time.Duration type

通过运行此命令,我得到的延迟是毫秒,抖动是微秒。我想让两个单位都等于毫秒,因此当我执行jitter = stats.StdDevRtt/1000jitter = jitter/1000(将微秒转换为毫秒)时,得到的抖动是纳秒级的:(。有什么办法可以使延迟和抖动都达到相同的单位毫秒。


问题答案:

编号为 time.Duration

time.Duration是具有int64作为其基础类型的类型,该类型存储持续时间(以纳秒为单位)。

如果您知道该值,但想要的不是纳秒,则只需乘以所需的单位,例如:

d := 100 * time.Microsecond
fmt.Println(d) // Output: 100µs

上面的方法是有效的,因为它100是一个无类型的常量,并且可以自动将time.Duration其转换为具有int64基础类型的常量。

请注意,如果您将该值作为类型化值,则必须使用显式类型转换:

value := 100 // value is of type int

d2 := time.Duration(value) * time.Millisecond
fmt.Println(d2) // Output: 100ms

time.Duration 编号

所以time.Duration总是纳秒。例如,如果您需要以毫秒为单位,则只需将time.Duration值除以毫秒内的纳秒数即可:

ms := int64(d2 / time.Millisecond)
fmt.Println("ms:", ms) // Output: ms: 100

其他例子:

fmt.Println("ns:", int64(d2/time.Nanosecond))  // ns: 100000000
fmt.Println("µs:", int64(d2/time.Microsecond)) // µs: 100000
fmt.Println("ms:", int64(d2/time.Millisecond)) // ms: 100

在Go Playground上尝试示例。

如果您的抖动(持续时间)小于您希望将其转换为的单位,则需要使用浮点除法,否则将执行整数除法,以切除小数部分。

float64在除法之前将抖动和单位都转换为:

d := 61 * time.Microsecond
fmt.Println(d) // Output: 61µs

ms := float64(d) / float64(time.Millisecond)
fmt.Println("ms:", ms) // Output: ms: 0.061

输出(在Go Playground上尝试):

61µs
ms: 0.061


 类似资料:
  • 我从GPS接收机接收到一个时间戳,它以秒后的微秒时间表示:

  • 问题内容: 如何在Linux中手动将抖动转换为毫秒,反之亦然?我知道内核2.6具有此功能,但是我正在研究2.4(家庭作业),尽管我看了一下代码,但它使用了许多宏常量,我不知道它们是否在2.4中定义。 问题答案: 如先前的回答所述,增量的速率是固定的。 为接受的函数指定时间的标准方法是使用常数。 那是Hertz的缩写,或每秒的刻度数。在计时器滴答设置为1ms的系统上,HZ = 1000。一些发行版或

  • 这个问题我已经研究了一段时间,但我只能得到秒数,下面是给我的说明:编写一个程序,从代表纳秒数的标准输入中读取一个非负整数。然后,程序编写一行输出,给出等效的天、小时、分钟、秒、毫秒、微秒和纳秒的数量。例如,输入为123456789123456789。则输出为:123456789123456789纳秒等于1428天、21小时、33分钟、9秒、123毫秒、456微秒和789纳秒。这是我写的: }

  • 问题内容: 我正在编写一个赛车应用程序,想要将大量毫秒转换为minutes:seconds.milliseconds(例如)。目前,我只是通过数学()进行运算,然后求余数并进一步除法,依此类推,但是我发现它时不时关闭1毫秒。我知道这听起来似乎没什么大不了的,但是我试图找到和的平均值,然后返回,这意味着它输入不正确,而应用程序的其余部分无法处理。 有没有一种方法使用或格式化毫秒到MM或类似的东西:s

  • 问题内容: 如何在Go中获得Unix时间(以毫秒为单位)? 我有以下功能: 我需要的精度较低,只需要毫秒。 问题答案: 只需将其划分: 这是一个示例,您可以编译并运行以查看输出

  • 问题内容: 我有一个等于日期的字符串,表示为自Unix纪元以来的毫秒数。 我正在尝试将其输出到dmY。 我得到的字符串是“ 1227643821310”,并被告知结果应等于 2-12-2008 ,但我不断得到的结果是 25-11-2008 我的代码如下: 关于为什么会这样的任何想法? 问题答案: 您已经做对了,1227643821根本不是2008年12月12日,的确是2008年11月25日。