Java 爪哇日历1月31日发行

Java 爪哇日历1月31日发行,java,Java,我有以下代码:- Calendar calc = Calendar.getInstance(); SimpleDateFormat sdf = new SimpleDateFormat("MMM-yyyy"); calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1); calc.set(Calendar.MONTH, Calendar.NOVEMBER); Syste

我有以下代码:-

        Calendar calc = Calendar.getInstance();
        SimpleDateFormat sdf = new SimpleDateFormat("MMM-yyyy");
        calc.set(Calendar.YEAR, calc.get(Calendar.YEAR) - 1);
        calc.set(Calendar.MONTH, Calendar.NOVEMBER);
        System.out.println("---NOV? : " + sdf.format(calc.getTime()));

        Calendar calc1 = Calendar.getInstance();
        calc1.set(Calendar.YEAR, calc1.get(Calendar.YEAR) - 1);
        calc1.set(Calendar.MONTH, Calendar.DECEMBER);
        System.out.println("-- DEC : " + sdf.format(calc1.getTime()));
上述代码的输出为:-

> ---NOV? : Dec-2012
> -- DEC : Dec-2012

这种情况只发生在1月31日,有人能解释为什么会发生这种情况吗?

日历被设置为宽松的解释,所以如果你告诉它11月31日,那么,11月只有30天,所以它会滚动到12月1日。

我怀疑第一个案例是将“11月31日”四舍五入到“12月1日”,因为您没有更改日历中的日期。

对我来说很好。不知道你为什么会得到这样的输出。可能很有趣,类似于java.util.Calendar confuce:我很想知道你看到他在哪里设置日期,因为我看到的都是设置的年份和月份值。事实上,这就是问题所在——他选择了当天(1月31日),将月份设置为11月或12月,即11月31日或12月31日。11月31日不存在,所以它变成了12月1日。绝对完美。我在我的机器上测试了相同的代码。输出相同,但当我将当前日期更改为1月30日时,工作正常。。。!所以@Chris你是对的。我不知道日期,只需要我的场景中的月份和年份。这段代码在过去的两个月里一直运行良好,但在31日突然发生了“爆炸”,我甚至想不出原因!!我很想知道你看到他在哪里设定日期,因为我看到的只是设定年和月的值。@Makoto他住的地方,表面上在你我以东的某个地方,“今天”已经是1月31日了。getInstance()返回一个设置为“现在”的日历,因此在他更改月份之前,它被预先设置为31…现在它单击。谢谢假设今天。我今天刚运行过,1月31日在这里。。。得到了与OP LOL相同的结果!使用
calc.setLenient(false)
使其在错误日期失败。