美文网首页
InfluxDB中的时间相关问题

InfluxDB中的时间相关问题

作者: 柴诗雨 | 来源:发表于2018-11-24 11:45 被阅读1160次

背景

在使用InfluxDB时,发现由于InfluxDB使用的是UTC时间,在查询时经常会遇到时区的问题,所以写了这篇文章,记录一下InfluxDB中时间相关的操作。

时间格式

InfluxDB除了支epoch_time外,还支持rfc3339_date_time_stringrfc3339_like_date_time_string

epoch_time

理论一些的解释是从协调世界时(Thursday, 1 January 1970)开始至今过去的时间。比如我们在java程序中使用System.currentTimeMillis()得到的就是这个时间。一般情况下为毫秒级(ms)精度,即13位Long类型。而在InfluxDB中,时间戳的精度可以达到纳秒级(ns)即19位Long类型。

rfc3339_date_time_string

rfc3339时间格式是ietf协会定义的一种时间格式,这个名字是因为它被定义在rfc3339中。感兴趣的同学可以自己查看上面的连接。InfluxDB中rfc3339的时间格式是这样的:

'YYYY-MM-DDTHH:MM:SS.nnnnnnnnnZ'

其中nnnnnnnnn是可选的,如果不写则会被设置为000000000。注意,如果使用这种时间格式,需要使用单括号(')将时间括起来。

rfc3339_like_date_time_string

因为rfc3339_date_time_string的格式确实比较反人类,所以InfluxDB也支持这种人类阅读更友好的格式:

'YYYY-MM-DD HH:MM:SS.nnnnnnnnn'

其中HH:MM:SS.nnnnnnnnn是可选的,如果不填写会被设置为00:00:00.000000000。所以查询时可以设置到天、小时、分钟、秒等不同精度。这种时间格式同样要求被单括号括起来。

调整时间戳精度

InfluxDB默认东时间是纳秒(ns),即19位时间戳。但是一般情况下时间精度不会这么高。所以如果使用秒级精度查询:

select * from disk where time >= 1542954639s and time <= 1542964713s

如果使用毫秒级精度查询:

select * from disk where time >= 1542954639000ms and time <= 1542964714000ms

其它精度类似。

调整时区

如果需要使用北京时间(东八区),可以在SQL中使用tc关键字:

select * from disk where time >= '2018-11-23 14:30:39' and time <= '2018-11-23 14:32:32' tz('Asia/Shanghai')

嗯,虽然实际上是上海。

总结

综上,在查询时推荐使用字符串时间格式yyyy-MM-dd HH:mm:ss并结合tc关键字调整时区这种方式,或者使用epoch time,然后在后面指定精度。注意在使用字符串类型的时候需要加上单括号,而epoch类型是不加单括号的。

参考

  1. InfluxDB官网timestamp说明
  2. InfluxDB官网timestamp查询

相关文章

网友评论

      本文标题:InfluxDB中的时间相关问题

      本文链接:https://www.haomeiwen.com/subject/ysweqqtx.html