美文网首页
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