我试图在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/