我无法看到下面的代码我出错了,它可能是显而易见的但我现在太盲目了,无法看到它。我将“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());
当我将Calendar.DAY设置为最大值时,日期显示为 31/01/2009
为什么我的月份设置没有?
答案 0 :(得分:7)
我们碰到了这个,结果是你设置的值在你真正尝试从日历中“获取”值之前不会被使用。我们感到困惑,因为使用调试器的值似乎永远不会被设置,但是当你真正“得到”它时,它就可以工作。
http://download.oracle.com/javase/1.5.0/docs/api/java/util/Calendar.html
获取和设置日历字段值
可以通过调用set方法来设置日历字段值。在需要计算其时间值(Epoch的毫秒数)或日历字段的值之前,不会解释日历中设置的任何字段值。调用get,getTimeInMillis,getTime,add和roll涉及这样的计算。
答案 1 :(得分:2)
我会仔细研究发生了什么,但一般的经验法则是:不要使用java.util。{Date,Calendar} 。使用Joda Time代替......它是所以更干净......
编辑:我目前无法重现您的问题。我仍然建议使用Joda,但是如果您可以发布一个简短但完整的程序来演示问题,我们可能会弄清楚出了什么问题。 编辑:基于另一条评论,我想知道你的格式化程序是否错误......你真的使用“dd / mm / yyyy”而不是“dd / MM / yyyy”吗? “mm”表示分钟,而不是数月。答案 2 :(得分:0)
也许你想使用Calendar.DAY_OF_MONTH