卡桑德拉时间戳:时间值不正确



我是卡桑德拉(Cassandra)的新手。我有一个Cassandra(V:3.11)表(数据)。它具有时间戳类型的列时间戳,我正在其中插入一个值。

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协调器节点的时区。为了准确性,DataStax建议指定时区,而不是依靠在Cassandra节点上配置的时区。

您需要将字符串日期转换为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

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

cassandra将在设置的时区中假设传入数据。例如,如果您在IST中设置了卡桑德拉

您可能必须在代码中设置Cassandra协调员时区,或计算传入的数据时区和Cassandra TimeZone之间的时差,并在将传入的数据写入Cassandra之前从传入的数据中添加/减去。这样,您将拥有编写给Cassandra的确切时间戳。

最新更新