Cassandra时间戳记:不正确的时间值

DEV*_*DEV 4 timestamp cassandra timestamp-with-timezone

我是Cassandra的新手。我有一个Cassandra(V:3.11)表(数据)。它具有timestamp类型的一列timeStampCol,我正在其中插入一个值。

insert into data (timeStampCol) values('2017-05-02 17:33:03');
Run Code Online (Sandbox Code Playgroud)

从表访问数据时

select * from data;
Run Code Online (Sandbox Code Playgroud)

我得到的结果是-

@ Row 1
----------+------------------------------------
 timeStampCol | 2017-05-02 08:33:03.000000+0000
Run Code Online (Sandbox Code Playgroud)

插入值和检索值的时间不同。原因可能是时区,如何正确设置?

Ash*_*lam 5

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

如果您将数据插入时间戳列而不提供像这样的时区:

insert into data (timeStampCol) values('2017-05-02 17:33:03');
Run Code Online (Sandbox Code Playgroud)

Cassandra将选择协调器时区

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

您需要将String日期转换为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
Run Code Online (Sandbox Code Playgroud)

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

  • 好的,我知道了。如果我使用Z [插入到数据(timeStampCol)值('2017-05-02 17:33:03Z')]中,则无需任何转换即可正常工作。 (2认同)