Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cassandra时间戳:时间值不正确_Cassandra_Timestamp_Timestamp With Timezone - Fatal编程技术网

Cassandra时间戳:时间值不正确

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

我是卡桑德拉的新手。我有一个Cassandra(V:3.11)表(数据)。它有一个timestamp类型的列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')],其工作正常,无需任何转换。