我一直试图找出如何生成与测量条目旁边的InfluxDB中相同的Unix时代时间。
首先,我要说,我试图在所有测试中使用相同的日期和时间:
April 01, 2017 at 2:00AM CDT
如果我在InfluxDB中看到一个度量,我会看到时间戳,例如:
1491030000000000000
如果我在InfluxDB中使用-precision rfc3339查看该度量,则如下所示:
2017-04-01T07:00:00Z
所以我可以看到InfluxDB使用了UTC
但是,我似乎不能通过Python生成相同的时间戳。
例如,我尝试了几种不同的方法:
>>> calendar.timegm(time.strptime('04/01/2017 02:00:00', '%m/%d/%Y %H:%M:%S'))
1491012000
>>> calendar.timegm(time.strptime('04/01/2017 07:00:00', '%m/%d/%Y %H:%M:%S'))
1491030000
>>> t = datetime.datetime(2017,04,01,02,00,00)
>>> print "Epoch Seconds:", time.mktime(t.timetuple())
Epoch Seconds: 1491030000.0
上面的最后两个示例至少给出了相同的数字,但它比InfluxDB的要短得多。我假设这与精度有关,InfluxDB会把事情归结为纳秒吗?
Python Result: 1491030000
Influx Result: 1491030000000000000
如果我试图使用Python的结果在InfluxDB中输入一个度量,它最终会显示如下:
1491030000 = 1970-01-01T00:00:01.49103Z
所以我得加上额外的九分。
我认为在Python中有几种方法可以编程地完成这个任务,如果它就像在结果中添加9个0一样简单。但是我想知道为什么我不能在一次转换中生成相同的精度级别。
我有一个CSV文件,里面有大量的旧时间戳,简单地说是"4/1/17 2:00“。每天凌晨2点都有测量。
我需要能够将其转换成InfluxDB需要"1491030000000000000“才能插入所有这些旧度量的适当格式。
更好地理解发生了什么以及为什么要比如何在Python中以编程方式解决这个问题更重要。尽管我很感激能同时做这两件事的回复:解释问题和我看到的是什么,以及为什么,以及关于如何使用CSV的一个列,其中包含"4/1/17 2:00“的时间戳,并将它们转换为"1491030000000000000”的时间戳,无论是在单独的文件中还是在第二列中。
发布于 2017-05-20 06:04:45
像这样的事情应该能解决你目前的问题。我没有测试csv来测试这个,但是它可能对你有用。它将接受您放置在"old.csv“位置的任何csv文件,并以纳秒为单位创建第二个带有时间戳的csv。
import time
import datetime
import csv
def convertToNano(date):
s = date
secondsTimestamp = time.mktime(datetime.datetime.strptime(s, "%d/%m/%y %H:%M").timetuple())
nanoTimestamp = str(secondsTimestamp).replace(".0", "000000000")
return nanoTimestamp
with open('old.csv', 'rb') as old_csv:
csv_reader = csv.reader(old_csv)
with open('new.csv', 'wb') as new_csv:
csv_writer = csv.writer(new_csv)
for i, row in enumerate(csv_reader):
if i != 0:
# Put whatever rows the data appears in and the row you want the data to go in here
row.append(convertToNano(row[<location of date in the row>]))
csv_writer.writerow(row)
至于发生这种情况的原因,在阅读了这之后,似乎并不是唯一一个对这个问题感到沮丧的人。似乎进水数据库恰好使用了不同类型的精度,而不是大多数python模块。不幸的是,我没有看到任何方法可以绕过它,只能对日期转换执行字符串操作。
发布于 2017-09-25 07:34:46
https://stackoverflow.com/questions/44086236
复制相似问题