Cassandra python driver event_time

问题描述:

我在转换python驱动返回时间戳的event_time时遇到了一些麻烦。Cassandra python driver event_time

基本上,我需要存储时间戳与一些关联的数据,然后按时间范围查询。在开始的时候,我不知道,你可以把时间戳查询,所以我想他们这样转换为字符串:

datetime.utcfromtimestamp(timestamp).strftime('%Y-%m-%d %H:%M:%S')

现在,当我查询从蟒蛇的数据(I转换时间戳与上述相同,并将它们放入查询中)我得到我想要转换回时间戳的日期时间对象。我试图

(row.event_time - datetime.utcfromtimestamp(0)).total_seconds()

但这似乎乱用的时区。这是否意味着返回的日期时间不是UTC?我尝试了一些我在网上找到的其他转换,但没有任何效果。一旦它几乎奏效,但当它到达夏令时开关的时候,我会得到新的一小时补偿。

所以,我的问题是:在Python和Cassandra之间使用时间戳的正确方法是什么?难道它不能像unix时间戳一样简单吗?

+0

UTC时区没有夏令时 - utc偏移量总是*为零。如果Cassandra返回代表utc时间的相同日期时间对象,那么'(dt-epoch).total_seconds()'应该返回原始的'timestamp'(不分数)。但它可能将天真的日期时间对象解释为偏离结果的本地时间。如果您无法在任何地方强制使用UTC时区,应该有一种方法可以直接传递时间戳。 – jfs 2015-02-12 16:15:41

没有看到你的代码和预期的结果我会提供以下内容:

如果您在查询时,以字符串插入,数据库会认为这是一个本地的时间和转向UTC。如果您的字符串包含UTC偏移量(+0000),则不会发生这种情况(请注意,因为您格式化的日期时间对象是时区初始的,所以'%z'将不起作用)。

如果你愿意,你可以使用参数化的形式让驾驶员把手编码:

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, datetime.utcfromtimestamp(timestamp)) 

session.execute("INSERT INTO <table> (key, time) VALUES (%s, %s)", (key, long(timestamp * 1000))) # scale to milliseconds 

从查询回来的值将是UTC,时区,天真日期时间对象。