Java日历对象减去一个月

Java日历对象减去一个月,java,date,calendar,Java,Date,Calendar,我正在尝试通过以下操作填充日历对象: Date now = new Date(System.currentTimeMillis()); Calendar cal = Calendar.getInstance(); cal.setTime(now); 现在是2013年11月26日,但当我打印出来 cal.get(Calendar.MONTH) 它将返回10 如何修复此问题?您不需要修复它。这是日历行为 您使用的是当前月份的System.currentTimeMillis() 返回10

我正在尝试通过以下操作填充日历对象:

Date now = new Date(System.currentTimeMillis());
Calendar cal = Calendar.getInstance();
    cal.setTime(now);
现在是2013年11月26日,但当我打印出来

cal.get(Calendar.MONTH)
它将返回10


如何修复此问题?

您不需要修复它。这是
日历
行为

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

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

0-Jan
1-Feb
-
-
参见

表示月份的get和set字段号。这是特定于日历的值。在公历和儒略历法中,一年的第一个月是1月,也就是0


cal.get(日历月)+1
-编号从0开始

您打印的是正确的

cal.get(Calendar.MONTH)

如果月份是
JAN
,它将打印
0
,因此对于
NOV
10
使用为月份定义的
日历
常量:

if(cal.get(Calendar.MONTH) == Calendar.NOVEMBER)
  System.out.println("It's November.");
日历的月份字段是基于零的,就像数组索引一样。

相反,2.3库提供了一个合理的月份编号。例如,
December=12

System.out.println(“今天的月号:+new org.joda.time.DateTime(2013,12,28,19,0,0).getMonthOfYear());
当运行时

今天的月数:12

你为什么不看看
日历
课程的文档呢?如果要向用户显示月数,或将其写入文件,则应使用
SimpleDateFormat
Calendar.get
返回的数字实际上仅供内部使用,因此您可以将它们与
Calendar.sevent
进行比较。