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

    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年1月31日当天的第一个实例,因此减去几个小时的差异确实会使您在前一天返回。

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

10-12 22:15