Чтобы сделать запрос 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 подготовленное утверждение?