gpt4 book ai didi

java - JDBC 和 MySQL DATE 相差一个 - 如何更正

转载 作者:行者123 更新时间:2023-11-29 04:43:44 25 4
gpt4 key购买 nike

我试图在 JDBC 代码中检索和处理 MySQL 计算的 DATE 值。这是一个小片段:

    MysqlDataSource ds = new MysqlDataSource();
ds.setServerName("myservername");
ds.setUser("myusernamne");
ds.setPassword("******");
ds.setDatabaseName("mydbname");
ds.setUseJDBCCompliantTimezoneShift(true);
ds.setUseLegacyDatetimeCode(false);
Connection con = ds.getConnection();
PreparedStatement p = con.prepareStatement("select last_day('2014-01-15')");
ResultSet rs = p.executeQuery();
rs.next();
Date date = rs.getDate(1);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println(df.format(date));

我希望这会打印 2014-01-31 但它会打印 2014-01-30。为什么,我能做些什么?运行我的 JVM 的机器位于美国东部地区,数据库采用 UTC,但我本以为我设置的参数应该仍能正确处理。

以防万一,我正在运行 MySQL 5.5 和 mysql-connector-java 版本 5.1.16。

最佳答案

这强制时间为 UTC 而不是依赖本地时间:

Calendar gmt = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
rs.getDate(1, gmt);

我相信您的查询会在 2014-01-31 返回当天的第一个实例,因此减去几个小时的差异确实会让您回到前一天。

关于java - JDBC 和 MySQL DATE 相差一个 - 如何更正,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23115538/

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