gpt4 book ai didi

java - 如何防止Mysql Connector/J转换DATE和TIME时区?

转载 作者:行者123 更新时间:2023-11-29 15:13:48 24 4
gpt4 key购买 nike

我正在使用以下 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 的几种组合, useTimezonenoTimezoneConversionForDateType但到目前为止我还无法让 mysql 驱动程序跳过日期字段的转换。

如何让 mysql 驱动程序跳过日期和时间字段的转换?

我已经尝试了 Connector/J 驱动程序的版本 6 和 8 mysql:mysql-connector-java:<version> 。另外,我正在使用 JOOQ 并使用一个简单的转换器在 LocalDate 之间进行转换。和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;
}
}

我必须承认,如果这个转换器与不同的时区一起使用,我还没有考虑过这种行为......

关于java - 如何防止Mysql Connector/J转换DATE和TIME时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59860215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com