背景
在使用InfluxDB时,发现由于InfluxDB使用的是UTC时间,在查询时经常会遇到时区的问题,所以写了这篇文章,记录一下InfluxDB中时间相关的操作。
时间格式
InfluxDB除了支epoch_time
外,还支持rfc3339_date_time_string
和rfc3339_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位时间戳。但是一般情况下时间精度不会这么高。所以如果使用秒级精度查询: