Cassandra时间戳:时间值不正确
我是卡桑德拉的新手。我有一个Cassandra(V:3.11)表(数据)。它有一个timestamp类型的列timeStampCol,我在其中插入了一个值Cassandra时间戳:时间值不正确,cassandra,timestamp,timestamp-with-timezone,Cassandra,Timestamp,Timestamp With Timezone,我是卡桑德拉的新手。我有一个Cassandra(V:3.11)表(数据)。它有一个timestamp类型的列timeStampCol,我在其中插入了一个值 insert into data (timeStampCol) values('2017-05-02 17:33:03'); 从表中访问数据时 select * from data; 我得到的结果是- @ Row 1 ----------+------------------------------------ timeStampCol
insert into data (timeStampCol) values('2017-05-02 17:33:03');
从表中访问数据时
select * from data;
我得到的结果是-
@ Row 1
----------+------------------------------------
timeStampCol | 2017-05-02 08:33:03.000000+0000
插入值和检索值在时间上不同。
原因可能是时区,我怎样才能正确呢 您选择的时间戳值是正确的,只是在不同的时区显示。 如果在时间戳列中插入数据,而不提供类似以下时区:
insert into data (timeStampCol) values('2017-05-02 17:33:03');
卡桑德拉将选择协调时区
如果未指定时区,则使用处理写入请求的Cassandra coordinator节点的时区。为确保准确性,DataStax建议指定时区,而不是依赖于Cassandra节点上配置的时区
您需要将字符串date转换为java.util.date并设置协调器节点的时区,在我的例子中是GMT+6
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date date = dateFormat.parse("2012-01-21");
dateFormat.setTimeZone(TimeZone.getTimeZone("GMT+6")); //Change this time zone
来源:Cassandra将假定传入数据在其设置的时区内。例如,如果您在IST中设置了Cassandra,即使传入的数据是UTC,Cassandra也会将其转换回UTC,因为数据在IST中
您可能需要在代码中设置Cassandra coordinator时区,或者计算传入数据时区和Cassandra时区之间的时差,并在将传入数据写入Cassandra之前将其加/减。这样,您就可以将准确的时间戳写入Cassandra。好的,明白了。如果我使用Z[插入数据(timeStampCol)值('2017-05-02 17:33:03Z')],其工作正常,无需任何转换。