Java Calendar Object减去一个月

我试图通过这样做来填充日历对象:

Date now = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(now); 

现在是2013-11-26,但是当我打印出来的时候

 cal.get(Calendar.MONTH) 

它将返回10。

我怎样才能解决这个问题?

你不需要修理它。 这是Calendar行为。

cal.get(Calendar.MONTH)

您正在使用当前月份的System.currentTimeMillis()

返回10因为月份从0开始。 所以10月是第11个月。 即Nov

 0-Jan 1-Feb - - 

请参阅Calendar.MONTH的javadoc

get和set的字段编号表示月份。 这是特定于日历的值。 格列高利历和朱利安历的一年中的第一个月是1月,即0

使用为月定义的Calendar常量:

 if(cal.get(Calendar.MONTH) == Calendar.NOVEMBER) System.out.println("It's November."); 

Calendar的month字段从零开始,就像数组索引一样。

cal.get(Calendar.MONTH) + 1 – 编号从0开始

你正在打印正确

 cal.get(Calendar.MONTH) 

如果月份为1月它打印0 ,那么对于NOV10

相比之下, Joda-Time 2.3库提供了合理的月份数。 例如, December = 12

 System.out.println( "Today's month number: " + new org.joda.time.DateTime(2013, 12, 28, 19, 0, 0).getMonthOfYear() ); 

跑的时候……

 Today's month number: 12