Python 3.6如何获取纳秒时间戳?适配InfluxDB 1.2方案求推荐
获取纳秒级时间戳并写入InfluxDB 1.2(Python 3.6兼容)
针对Python 3.6环境下的需求,这里有两个简便的方法获取纳秒级时间戳,再结合InfluxDB 1.2的写入示例,帮你快速实现需求:
一、获取纳秒级时间戳的两种简便实现
方法1:基于datetime模块(推荐,时区明确)
这个方法直接计算UTC时间距离Unix纪元(1970-01-01 UTC)的总纳秒数,逻辑清晰且时区明确:
import datetime def get_utc_ns_timestamp(): current_utc = datetime.datetime.utcnow() epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc) # 计算时间差的总秒数,再转换为纳秒 return int((current_utc - epoch).total_seconds() * 10**9)
注:加上
tzinfo=datetime.timezone.utc是为了避免潜在的时区警告,Python 3.6+支持这个写法。
方法2:基于time模块(更简洁)
如果不需要显式处理时区,time.time()返回的是Unix纪元以来的秒数(带小数),直接乘以1e9取整即可得到纳秒时间戳:
import time def get_ns_timestamp(): return int(time.time() * 10**9)
注:
time.time()的精度依赖系统时钟,大部分现代系统能达到微秒级,转成纳秒后最后几位会是0,这是正常现象。
二、写入InfluxDB 1.2的完整示例
首先确保安装兼容InfluxDB 1.2的客户端版本:
pip install influxdb==5.3.1
然后结合上面的时间戳方法,编写写入代码:
import datetime from influxdb import InfluxDBClient def get_utc_ns_timestamp(): current_utc = datetime.datetime.utcnow() epoch = datetime.datetime(1970, 1, 1, tzinfo=datetime.timezone.utc) return int((current_utc - epoch).total_seconds() * 10**9) # 初始化InfluxDB连接(根据你的实际配置修改) client = InfluxDBClient( host='localhost', port=8086, username='your_username', # 如果开启了认证 password='your_password', database='your_target_db' ) # 构造符合InfluxDB Line Protocol的数据点 data = [ { "measurement": "sensor_data", # 你的测量表名 "tags": { "device_id": "sensor_001" # 标签,用于分组查询 }, "fields": { "temperature": 25.6, # 字段,支持数值/字符串等类型 "humidity": 62.3 }, "time": get_utc_ns_timestamp() # 纳秒级时间戳 } ] # 写入数据 client.write_points(data)
关键注意事项
- 时区一致性:InfluxDB默认存储UTC时间,推荐始终用UTC时间戳写入,避免跨时区查询时的混乱。
- 数据类型:InfluxDB的时间戳必须是整数类型,所以一定要用
int()转换,不能传入浮点数。 - 客户端版本:InfluxDB 1.2比较老旧,务必安装
influxdb==5.3.1这个兼容版本,新版本客户端可能无法正常连接。
内容的提问来源于stack exchange,提问作者saddayz
相关产品推荐
相关产品推荐

