Cassandra 时间戳:时间值不正确
Cassandra Timestamp : Incorrect time value
我是 Cassandra 的新手。我有一个 Cassandra( V: 3.11 ) table(数据)。它有一个时间戳类型的列 timeStampCol,我在其中插入一个值。
insert into data (timeStampCol) values('2017-05-02 17:33:03');
从 table
访问数据时
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 将选择协调器时区
If no time zone is specified, the time zone of the Cassandra coordinator node handing the write request is used. For accuracy, DataStax recommends specifying the time zone rather than relying on the time zone configured on the Cassandra nodes.
您需要将字符串日期转换为 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_r.html
Cassandra 将在其设置的时区内假定传入数据。例如,如果您在 IST 中设置了 Cassandra,即使传入数据是 UTC,Cassandra 也会将其转换回 UTC,并考虑数据在 IST 中。
您可能需要在代码中设置 Cassandra 协调器时区,或者计算传入数据时区与 Cassandra 时区之间的时差,以及 add/subtract 传入数据写入 Cassandra 之前的时区。这样你就可以将准确的时间戳写入 Cassandra。
我是 Cassandra 的新手。我有一个 Cassandra( V: 3.11 ) table(数据)。它有一个时间戳类型的列 timeStampCol,我在其中插入一个值。
insert into data (timeStampCol) values('2017-05-02 17:33:03');
从 table
访问数据时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 将选择协调器时区
If no time zone is specified, the time zone of the Cassandra coordinator node handing the write request is used. For accuracy, DataStax recommends specifying the time zone rather than relying on the time zone configured on the Cassandra nodes.
您需要将字符串日期转换为 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_r.html
Cassandra 将在其设置的时区内假定传入数据。例如,如果您在 IST 中设置了 Cassandra,即使传入数据是 UTC,Cassandra 也会将其转换回 UTC,并考虑数据在 IST 中。
您可能需要在代码中设置 Cassandra 协调器时区,或者计算传入数据时区与 Cassandra 时区之间的时差,以及 add/subtract 传入数据写入 Cassandra 之前的时区。这样你就可以将准确的时间戳写入 Cassandra。