Java Calendar.set没有给出正确的结果

Mad*_*urf 2 java calendar date

我无法看到下面的代码我出错了,它可能是显而易见的但我现在太盲目了.我将"01/01/2009"的日期传递给日历实例.然后我尝试将月份设置为3月份,我看到的输出是

格式:01/01/2009

cal月:2

cal.set( Calendar.MONTH, mth ); //mth = int 2

log.debug("formatted: " + formatter.format(cal.getTime()));
log.debug("cal month: "+Integer.valueOf(cal.get(Calendar.MONTH)).toString());
Run Code Online (Sandbox Code Playgroud)

当我将Calendar.DAY设置为最大值时,日期为31/01/2009

为什么我的月份设置没有采取?

emi*_*zel 7

我们碰到了这个结果,结果是你设置的值在你真正尝试从日历中"获取"值之前不会被使用.我们感到困惑,因为使用调试器的值似乎永远不会被设置,但是当你真正"得到"它时,它就可以工作了.

http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html

获取和设置日历字段值

可以通过调用set方法来设置日历字段值.在需要计算其时间值(距Epoch的毫秒数)或日历字段的值之前,不会解释日历中设置的任何字段值.调用get,getTimeInMillis,getTime,add和roll涉及这样的计算.