2016-11-30 3 views
0

Мне нужно преобразовать дату (без компонента времени), выбранный с помощью toedter JCalendar, в метку времени SQL (то есть с частью времени 0:00:00), чтобы использовать ее в SQL-запросах.Дата преобразования временной метки с Firebird

У меня там ничего более простого или элегантного? Что рекомендуется?

Date dt = jCalendar1.getDate(); 
Timestamp ts = Timestamp.valueOf(dt.toInstant().atZone(ZoneId.systemDefault()).toLocalDate().atStartOfDay()); 

ответ

1

Вы можете просто использовать java.sql.Date и PreparedStatement.setDate, то Jaybird будет обрабатывать преобразование даты в метку времени с течением времени значение 00: 00: 00.0 для вас. Пример:

java.util.Date dt = jCalendar1.getDate(); 
java.sql.Date sqlDate = new java.sql.Date(dt.getTime()); 
pstmt.setDate(1, sqlDate); 
+0

Большое спасибо, но это не работает для меня. Выбрасывает исключение, но набор результатов неверен (пуст). Мой код SQL: "WHERE KalDatum =?". KalDatum - это отметка времени. Проблема может заключаться в том, что моя БД несчастливо Dialect 1 (вот почему я должен работать только с Timestamps). – Tom

+0

@Tom На диалекте 1 a 'DATE' - это метка времени, вы уверены, что эти даты имеют нулевое время? –

+0

Извините, я полный любитель. jCalendar1.getDate() aparently не имеет нулевого времени. Я понял ваше предположение, что ваш код автоматически установит время на 0 в результирующей временной отметке - так же, как мой код использует atStartofDay(). Мой тест на ваш код: если я установил dt вручную в Date с ненулевым временем, мой результат будет неправильным (пустым); если установлен на нулевое время Date, он работает. – Tom

Смежные вопросы