我正在使用以下 DSN 连接到 mysql 服务器:jdbc:mysql://localhost/my_database?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC
.
我遇到的问题是java.sql.Date
实例正在将时区从我的本地时区转换为 UTC。我的应用程序将日期视为与时区无关的日期,这导致了一些问题。
例如,我在 IST (UTC+05:30) 中,当我在代码中设置某个日期字段为“2020-01-22”时,它会以“2020-01-21”的形式发送到服务器。我已经从mysql常规日志中验证了这一点。
我尝试了几种组合useLegacyDatetimeCode
, useTimezone
and noTimezoneConversionForDateType
但到目前为止我还无法让 mysql 驱动程序跳过日期字段的转换。
如何让 mysql 驱动程序跳过日期和时间字段的转换?
我已经尝试过 Connector/J 驱动程序的版本 6 和 8mysql:mysql-connector-java:<version>
。
另外,我正在使用 JOOQ 并使用一个简单的转换器在之间进行转换LocalDate
and java.sql.Date
.
我自己也遇到了同样的问题,现在我用这个转换器解决了它:
public final class DateConverter implements Converter<Date, LocalDate> {
@Override
public final LocalDate from(final Date value) {
if(null == value) {
return null;
} else {
return value.toLocalDate();
}
}
@Override
public final Date to(final LocalDate value) {
if(null == value) {
return null;
} else {
return new Date(value.atStartOfDay(ZoneOffset.UTC).toInstant().toEpochMilli());
}
}
@Override
public final Class<Date> fromType() {
return Date.class;
}
@Override
public final Class<LocalDate> toType() {
return LocalDate.class;
}
}
我必须承认,如果这个转换器与不同的时区一起使用,我还没有考虑过这种行为......
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)