Я пытался написать Converter<java.sql.Date, java.time.LocalDate>
, но не могу заставить его работать со всеми настройками часового пояса.
Идея:
- если клиентский код имеет
LocalDate
, скажем, 20 августа 2014 г., и сохраняет его в БД, он должен отображаться в БД как 20 августа 2014 г., независимо от часового пояса клиента. - если БД содержит дату 20 августа 2014 года, клиент должен получить LocalDate 20 августа 2014 года, независимо от часового пояса клиента.
Мой тест:
@Test public void dateConverter() {
for (int offset = -12; offset <= 12; offset++) {
TimeZone localTz = TimeZone.getTimeZone(ZoneOffset.ofHours(offset));
TimeZone.setDefault(localTz);
LocalDate ld = LocalDate.now();
sql.insertInto(DATE_TEST).set(new DateTestRecord(ld)).execute();
LocalDate savedLd = sql.selectFrom(DATE_TEST).fetchOne(DATE_TEST.DATE_);
assertEquals(savedLd, ld, "offset=" + offset);
sql.delete(DATE_TEST).execute();
}
}
Мой преобразователь:
public class DateConverter implements Converter<Date, LocalDate>{
@Override public LocalDate from(Date date) { return date.toLocalDate(); }
@Override public Date to(LocalDate ld) { return Date.valueOf(ld); }
@Override public Class<Date> fromType() { return Date.class; }
@Override public Class<LocalDate> toType() { return LocalDate.class; }
}
Пробовал разные варианты, но ничего не помогло...