为什么日历 class (Java) 会重置其字段?

Why is Calendar class (Java) resetting its fields?

我正在尝试设置日历 class 实例的属性。但每次我到 12 月 30 日,它都会重置到下一年。这是日历中的抽奖 class?

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

对于 Calendar,月份是从 0 开始的,因此您实际上是将月份设置为明年的一月。

如果您确实需要使用 Calendar,我建议至少使用 SimpleDateFormat 将您的 String 解析为 Date 并使用它设置日历。

查看日历 API 文档,月值基于 0,即一月为 0。

month - the value used to set the MONTH calendar field. Month value is 0-based. e.g., 0 for January.

您将月份设置为 12。这实际上为您提供了下一年。要更正尝试:

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

希望对您有所帮助