使用日历设置日期的第二天时,日期和月份不正确

时间:2014-08-28 08:20:48

标签: java date calendar date-format

//fetch date and convert to date type
String DateString = Integer.toString(getDay()) + "/" + Integer.toString(getMonth()) + "/" + Integer.toString(getYear());
DateFormat parser = new SimpleDateFormat("dd/MM/yyyy"); //current format of date
Date date = (Date) parser.parse(DateString); //convert string to date
//calculate next day
Calendar cal = Calendar.getInstance();
cal.setTime(date); //set calendar time to chosen date
cal.add(Calendar.DATE, 1); //add 1 day to calendar date
//set object to next day
parser.format(cal.getTime()); //set format to dd/MM/yyyy
setDay(cal.get(cal.DAY_OF_MONTH));
setMonth(cal.get(cal.MONTH));
setYear(cal.get(cal.YEAR));

我将日期设定为2002年10月23日。我想使用上述方法将其设置为第二天。它显示的是2002年9月24日而不是2002年10月24日。为什么它在当天增加1并从月中删除1?

1 个答案:

答案 0 :(得分:3)

原因是月份是基于零的指数,即,它们从0开始而不是1,因此1月份为0,2月份为1,3月份为2且...... Decemeber为11

来自Oracle docs

  

月份由0到11之间的整数表示; 0是1月,1是   二月,等等;因此11月是12月。

修改: -

试图说明为什么月份从零开始的原因。 tm中定义的time.h结构有一个整数字段tm_mon,范围为0-11,所以我想这是从C语言中获取的。另一个可能听起来很奇怪的原因,但可能是因为我们有月份的名称,但有几天(1,2,3 ...... 30,31),我们没有任何名字