我试图写一个Converter<java.sql.Date, java.time.LocalDate>
,但我无法让它与所有时区设置一起工作。
想法:
- 如果客户端代码有
LocalDate
2014 年 8 月 20 日,并将其保存到数据库中,则无论客户端时区是什么,它都应在数据库中显示为 2014 年 8 月 20 日。 - 如果数据库包含 2014 年 8 月 20 日的日期,则客户端应收到 2014 年 8 月 20 日的 LocalDate,无论客户端时区是什么。
我的测试:
@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; }
}
我尝试了各种变体,但都没有奏效......