2016-08-06 2 views
0

Я сохраняю текущую отметку времени в таблице базы данных, используя now() [example- 20160807000133] И я хочу сравнить эту метку времени, хранящуюся в таблице с текущей меткой времени в java.сравнить временную метку, хранящуюся в базе данных в java

Как это сделать?

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

+3

Пожалуйста, пост кода, что вы пробовали до сих пор – Sanghita

+1

Было бы проще сделать сравнение временных меток в самом запросе, не передавая переменное время даты от Java. Какая БД вы используете, а какие таблицы - таргетинг на ваши запросы? –

ответ

0

java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют старые неприятные классы времени, такие как java.util.Date, .Calendar, & java.text.SimpleDateFormat. Команда Joda-Time также рекомендует перейти на java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений.

Большая часть функциональности java.time портирована на Java 6 & 7 в ThreeTen-Backport и далее адаптирована для Android в ThreeTenABP.

String input = "20160807000133"; 
DateTimeFormatter BASIC_ISO_DATETIME = DateTimeFormatter.ofPattern ("uuuuMMddHHmmss"); // Make constant somewhere in your codebase. 

LocalDateTime ldt = LocalDateTime.parse (input , BASIC_ISO_DATETIME); 

Дамп для консоли.

System.out.println ("input: " + input + " | ldt: " + ldt); 

вход: 20160807000133 | LDT: 2016-08-07T00: 01: 33

Time Zone

Обратите внимание, что ваш ввод данные делают ошибку невключения какой-либо информации о часовом поясе или офсетный из-UTC. Таким образом, это не представляют момент на шкале времени. Если бы эти данные были предназначены для Парижа, это был бы другой момент, чем если бы это предназначалось для Монреаля.

Если вы знаете контекст, предназначенный для определенного часового пояса, примените ZoneId перед использованием этого значения в запросе базы данных.

ZoneId zoneId = ZoneId.of ("America/Montreal"); 
ZonedDateTime zdt = ldt.atZone (zoneId); 

НМВ: 2016-08-07T00: 01: 33-04: 00 [Америка/Монреаль]

Database

Если драйвер JDBC соответствует JDBC 4.2 или более поздней версии , вы должны иметь возможность напрямую передавать/извлекать типы java.time через setObject & getObject.

Если нет, вернитесь к преобразованию с использованием новых методов, добавленных в старые классы. Для java.sql.Timestamp это означает переход через Instant, момент на шкале времени в UTC с разрешением до наносекунд. Мы можем извлечь объект Instant из нашего ZonedDateTime.

java.sql.Timestamp ts = java.sql.Timestamp.from(zdt.toInstant()); 
myPreparedStatement.setTimestamp(ts); 

... и ...

java.sql.Timestamp ts = myResultSet.getTimestamp(1); 
Instant instant = ts.toInstant(); 
ZoneId zoneId = ZoneId.of ("America/Montreal"); 
ZonedDateTime zdt = instant.atZone (zoneId); 
Смежные вопросы