Чтобы сделать запрос JDBC, мне нужно передать ему дату. Дата хранится в Date
поле типа базы данных PostgreSql, которая представляет определенный день без какого-либо времени.
Поскольку мне нужна только дата, я решил использовать конкретный объект, который представляет только дату без времени, которая LocalDate
из пакета Joda-Time. Я подумал, что это важно, потому что, если бы я использовал объект DateTime, он имел бы данные избыточного времени, а также может привести к ошибкам в конце летнего времени, когда часы будут отложены назад на один час (хотя ситуация беспрецедентно редка, невозможно).
Но когда я начал пытаться скомпоновать объект LocalDate
с принятыми аргументами метода preparedStatement.setDate
, я не нашел подходящего способа сделать это.
setDate
принимает java.sql.Date
как параметр. И единственным вариантом для построения объекта java.sql.Date
является передача его в миллисекундах.
Но это побеждает все цели использования LocalDate
из пакета Joda-Time, так как при этом преобразовании мы возвращаемся к миллисекундам, и, хотя эти преобразования происходят, часы могут быть возвращены на один час и изменить дату на предыдущий дата.
Итак, теперь у меня есть эта строка в моем коде:
preparedStatement.setDate(1, new java.sql.Date(localDate.toDate().getTime()));
Но это лучший способ конвертировать LocalDate
в формат setDate
?
Являются ли мои проблемы связанными с летним временем и соответствующими тактовыми сдвигами?
Есть ли лучший способ передать дату (и только дату без времени) в JDBC подготовленное утверждение?