java.util.Date到java.sql.Date转换给出了错误的月份

ada*_*j21 2 java date jdbc

请考虑以下代码段:

Calendar futureDate = Calendar.getInstance();
int year = 2011;
int month = 11;
int day = 14;
futureDate.set(year,month, day);
System.out.println(futureDate.toString());
java.sql.Date sqlDate  = new java.sql.Date( futureDate.getTime().getTime());
Run Code Online (Sandbox Code Playgroud)

futureDate.toString()的打印输出是:

..... YEAR = 2011,月= 11,WEEK_OF_YEAR = 43,WEEK_OF_MONTH = 4,DAY_OF_MONTH = 14,DAY_OF_YEAR = 289,DAY_OF_WEEK = 1,DAY_OF_WEEK_IN_MONTH = 3,AM_PM = 0,HOUR = 11,HOUR_OF_DAY = 11,MINUTE = 32,SECOND = 51,微差= 117,ZONE_OFFSET = -18000000,DST_OFFSET = 3600000]

这表明Calendare对象保存了正确的日期.但是,在转换为sql日期并存储在数据库(MySQL通过JDBC)之后,MySQL表显示此日期的"2011-12-14"而不是"2011-11-14".我会怀疑语言环境和时区,但这些会导致一天中的时间不符合日期的月份部分.

我做错了什么线索?

Mat*_*all 5

Calendar#set(int, int, int)将month参数解释为从零开始,因此futureDate.set(2011, 11, 14)将日历的月份设置为12月.