TL;DR InfluxDB技术技巧 – Flux时间戳

导航至

在这篇文章中,我们分享了一些关于如何在Flux中使用时间戳的快速示例。

问:Flux中有哪些时间戳格式可用?

答:有两个时间戳格式可用

Unix时间戳

Unix时间戳以指定的单位计算自Unix纪元(1970-01-01T00:00:00Z UTC)的时间。单位是在将数据写入InfluxDB时设置的精度。

InfluxDB支持的Unix时间戳精度如下:

精度 描述 示例
ns 纳秒 1577836800000000000
us 微秒 1577836800000000
ms 毫秒 1577836800000
s 1577836800

上述示例代表 2020-01-01T00:00:00Z UTC

RFC3339时间戳

RFC3339时间戳使用RFC 3339建议的人类可读日期时间格式(例如:2020-01-01T00:00:00.00Z)。Flux和InfluxDB客户端返回带有RFC3339时间戳的查询结果。

问:我如何转换时间戳格式?

答:要将Unix纳秒时间戳转换为人类可读的RFC3339时间戳,请使用time()函数。

time(v: 1568808000000000000)
// Returns 2019-09-18T12:00:00.000000000Z

要将RFC3339时间戳转换为Unix纳秒,请使用uint()函数。

uint(v: 2019-09-18T12:00:00.000000000Z)
// Returns 1568808000000000000

问:我如何计算两个时间戳之间的持续时间?

答:Flux不支持使用时间类型值进行数学运算。要计算两个时间戳之间的持续时间

  1. 使用uint()函数将每个时间戳转换为Unix纳秒时间戳。
  2. 从另一个Unix纳秒时间戳中减去。
  3. 使用duration()函数将结果转换为持续时间。
time1 = uint(v: 2019-09-17T21:12:05Z)
time2 = uint(v: 2019-09-18T22:16:35Z)

duration(v: time2 - time1)
// Returns 25h4m30s

问:我如何获取当前时间?

答:要获取UTC时间的当前时间,请使用now()函数。请注意,now()函数在运行时被缓存,因此所有now()实例都返回相同的值。

now()

要获取主机机器的系统时间的当前RFC3339格式,请导入系统包和system.time()函数。

import "system"

system.time()