Cassandra时间戳:时间值不正确

时间:2017-09-25 00:09:08

标签: cassandra timestamp timestamp-with-timezone

我是Cassandra的新人。我有一张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

插入的值和检索的值随时间而变化。 原因可能是时区,我怎样才能让它正确?

2 个答案:

答案 0 :(得分:4)

您选择的时间戳值是正确的,它只是在不同的时区显示。

如果您将数据插入时间戳列而不提供如下所示的时区:

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将选择协调员时区

  

如果未指定时区,则使用处理写请求的Cassandra协调器节点的时区。为了准确起见,DataStax建议指定时区,而不是依赖于Cassandra节点上配置的时区。

您需要将字符串日期转换为java.util.Date并设置协调器节点的时区,在我的情况下,它是GMT + 6

ab -n 10 -c 10 -H "Host: www.example.com" https://93.184.216.34/

来源:https://docs.datastax.com/en/cql/3.0/cql/cql_reference/timestamp_type_r.html

答案 1 :(得分:0)

Cassandra 将假定传入的数据位于其设置的时区。例如,如果您在 IST 中设置了 Cassandra,并且即使传入数据是 UTC,Cassandra 也会将其转换回 UTC,考虑数据在 IST 中。

您可能需要在代码中设置 Cassandra 协调器时区或计算传入数据时区和 Cassandra 时区之间的时差,并在将传入数据写入 Cassandra 之前将其添加/减去。这样,您就会将确切的时间戳写入 Cassandra。