Предостережение: я не использую Кассандру. Но, возможно, это поможет.
Типы данных
Как вы, кажется, поняли, не храните значения даты и времени в виде текста, если ваша база данных поддерживает соответствующий тип данных даты и времени.
Текстовые форматы
И, к вашему сведению, ваш формат для представления значения времени и даты ужасен. При сериализации значений времени и даты в виде текста используйте стандартные форматы ISO 8601 .
Момент в зависимости от даты-времени-дня
Другая проблема: вы пытаясь отследить моменты с использованием типа timestamp
в Cassandra , но сохраненные вами строки, такие как Wed Jan 15 14:29:00 2020
, не являются моментом. Без контекста часового пояса или смещения от UT C мы не можем знать, является ли это время почти 14:30 в 14:30 в Токио, Япония, или в 14:30 в Толедо, Огайо, США, два очень разных моменты с интервалом в несколько часов.
Если вы знаете предполагаемый часовой пояс для этой даты и времени суток, примените ZoneId
, чтобы получить ZonedDateTime
. Я предполагаю, что UT C (смещение нуля часов-минут-секунд) было предназначено.
OffsetDateTime odt = ldt.atOffset( ZoneOffset.UTC ) ;
См. Этот код, запущенный на IdeOne.com .
База данных
Если у вас есть драйвер для Cassandra, который поддерживает JDB C 4.2 и более поздние версии, вы сможете отправить этот java .time объект напрямую.
myPreparedStatement.setObject( … , odt ) ;
Если нет, вы можете получить счет в миллисекундах с начала отсчета эпохи первого момента 1970 года по Гринвичу C.
long milliseconds = odt.toInstant().toEpochMilli() ;
миллисекунд: 1579098540000
Идя в другом направлении.
Instant instant = Instant.ofEpochMilli( milliseconds ) ;
получая эту ошибку: DateOverFlowWarning: Некоторые метки времени больше, чем Python datetime может представлять
Я могу только угадай. Где-то в вашем наборе инструментов есть библиотека Python. Я полагаю, что библиотека ограничена использованием 32-разрядного целого числа. Но вам нужно 64-разрядное целое число для представления количества миллисекунд с 1970-01-01T00: 00Z для значения Cassandra timestamp
.
О java .time
java .time фреймворк встроен в Java 8 и позже. Эти классы вытесняют проблемные старые устаревшие классы даты и времени, такие как java.util.Date
, Calendar
, & SimpleDateFormat
.
Чтобы узнать больше, см. Учебник Oracle . И поиск переполнения стека для многих примеров и объяснений. Спецификация: JSR 310 .
Проект Joda-Time , теперь в режиме обслуживания , рекомендует перейти на java .time классов.
Вы можете обмениваться java .time объектами напрямую с вашей базой данных. Используйте драйвер JDB C , совместимый с JDB C 4.2 или более поздней версией. Нет необходимости в строках, нет необходимости в java.sql.*
классах.
Где получить классы java .time?