为什么Calendar类(Java)重置其字段?

时间:2015-03-04 14:05:50

标签: java date calendar gregorian-calendar

我正在尝试为Calendar类实例设置属性。但每次到12月30日,它都会重置到明年。这是Calendar类中的绘图吗?

public Calendar setCalendar()
{
    String Date = "2013-12-30";
    int yyyy = Integer.parseInt(date.substring(0,4));
    int mm = Integer.parseInt(date.substring(5,7));
    int dd = Integer.parseInt(date.substring(8,10));
    System.out.println(yyyy + " " + mm + " " + dd);
    Calendar Cal= new GregorianCalendar();
    Cal.set(yyyy,mm,dd);
    System.out.println(Cal.get(Calendar.YEAR)+","+Cal.get(Calendar.MONTH));

    return Cal;
}

输出: 2013 12 30 2014,0

2 个答案:

答案 0 :(得分:3)

Calendar个月的基数为0,因此您实际上将月份设置为明年的1月份。

如果您确实需要使用Calendar我建议您至少使用SimpleDateFormatString解析为Date并使用该{1}}设置日历。

答案 1 :(得分:0)

检查Calendar API doc,月值为0,即Jan为0.

  

month - 用于设置MONTH日历字段的值。月值基于0。例如,1月份为0。

您将月份设置为12.这有效地为您提供了明年。要纠正尝试:

Cal.set(yyyy,mm-1,dd);

希望有所帮助