Получите время от Instant и сохраните в Кассандре - PullRequest
0 голосов
/ 20 декабря 2018

У меня есть поле «eventTime» в таблице Cassandra с типом данных «time».Я пытаюсь сохранить текущее время UTC, но не смог.Я объявил поле в Java как -

private Long eventTime;

Пробовал несколько способов получить время из Мгновенного, но сохраняются неверные данные.

  1. Instant.now (часы).getLong (ChronoField.NANO_OF_SECOND)

Сохранено "00: 00: 00.093563694" в Кассандре

LocalDateTime.ofInstant (Instant.now (часы), ZoneOffset.UTC) .getHour ()

Сохранено "00: 00: 00.000000001" в Кассандре

Если я непосредственно запускаю запрос вставки в CQL со строковым значением как «16: 15: 09.049909», тогда он работает.

Должен ли я изменить тип данных на «текст» и сэкономить время в виде строки.

Ответы [ 2 ]

0 голосов
/ 20 декабря 2018

Вы можете сопоставить Instant с timestamp Кассандры, если вы используете дополнительные кодеки из драйвера Java, как описано в документации: https://docs.datastax.com/en/developer/java-driver/3.6/manual/custom_codecs/extras/#jdk-8

Добавьте в pom.xml следующее:

<dependency>
  <groupId>com.datastax.cassandra</groupId>  
  <artifactId>cassandra-driver-extras</artifactId> 
  <version>3.6.0</version> 
 </dependency>

И зарегистрировать кодек при создании Cluster объекта:

import com.datastax.driver.extras.codecs.jdk8.InstantCodec; 
import java.time.Instant; 
...
cluster.getConfiguration().getCodecRegistry()
     .register(InstantCodec.instance);
0 голосов
/ 20 декабря 2018

Вы хотите сохранить текущее время на Кассандре?

LocalTime localTime = LocalTime.now();

Вы извлекаете некоторую информацию выше в своем коде как ChronoField.NANO_OF_SECOND или .getHour().Просто используйте местное время целиком.

...