Метка времени Кассандры: неверное значение времени
Я новичок в Кассандре. У меня есть таблица Кассандры ( V: 3.11) (данные). У него есть столбец timeStampCol типа timestamp, и я вставляю в него значение.
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 ответа
Выбранное вами значение метки времени является правильным, оно просто отображается в другом часовом поясе.
Если вы вставляете данные в столбец отметки времени без указания часового пояса, как этот:
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_r.html
Кассандра будет принимать входящие данные в установленном часовом поясе. Например, если у вас настроена Cassandra в IST, и даже если входящие данные - это UTC, Cassandra преобразует их обратно в UTC, учитывая, что данные находятся в IST.
Возможно, вам придется установить часовой пояс координатора Cassandra в коде или рассчитать разницу во времени между часовым поясом входящих данных и часовым поясом Cassandra и добавить / вычесть это из входящих данных до того, как они будут записаны в Cassandra. Таким образом, вы получите точные отметки времени, записанные в Кассандру.