向数据库中写入指定日期,但是每次写入,月份都会比输入值多1,有关代码片段如下:Calendar c = Calendar.getInstance();
c.set(2008, 1, 1);
java.util.Date dd = new java.util.Date(c.getTimeInMillis());
DateFormat df = DateFormat.getDateInstance();
String date = "-------日期:" + c.get(Calendar.YEAR) + "-" + c.get(Calendar.MONTH) + "-" + c.get(Calendar.DATE) + "--------" + c.toString() + "---" + df.format(dd);输入值2008年1月1日。
断点得到的字符串date的值如下:          "-------日期:2008-1-1--------java.util.GregorianCalendar[time=1201838399078,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Shanghai",offset=28800000,dstSavings=0,useDaylight=false,transitions=19,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2008,MONTH=1,WEEK_OF_YEAR=5,WEEK_OF_MONTH=1,DAY_OF_MONTH=1,DAY_OF_YEAR=32,DAY_OF_WEEK=6,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=11,HOUR_OF_DAY=11,MINUTE=59,SECOND=59,MILLISECOND=78,ZONE_OFFSET=28800000,DST_OFFSET=0]---2008-2-1"显然,Calendar设置是正常的,但是设置Date时就出问题了,月份被+1(java.util.Date和java.sql.Date都是这样)。我之前在另一个工程中用同样的方法为日期赋值,是正常的。在这个工程中使用用Calendar设置java.sql.Timestamp也是正常的,不知为何用Calendar设置Date会出这种问题?

解决方案 »

  1.   

    我记得好像Calendar的月份是从0~11吧?或许我记错了
      

  2.   

    经过试验,Calendar的月数比Date要少1
      

  3.   

    果然如此!
    真不明白sun为什么要这样做,而且在API文档中也没有做出说明
      

  4.   

    呵呵,一般在学习J2SE的过程中,这个问题都会被很多书中反复强调。
      

  5.   

    JAVA中的月份是0到11表示的~
    你要在显示的时候+1