为什么我的打印日期错了?

Sim*_*eke 2 java datetime android

我已经验证了从文件中正确读取日期,但是一旦我使用SimpleDateFormat.format该模式,"dd/MM/yy"它突然增加了一个月.这让我相信宽松模式正在计算错误的价值.但我不知道是什么会让它增加​​整整一个月.

我读到的一些例子日期:

16/09/2013
23/09/2013
30/09/2013
07/10/2013
14/10/2013
21/10/2013
Run Code Online (Sandbox Code Playgroud)

用于解析日期的代码(它是我制作的Calendar的包装器):

public static SimpleDateTime parseDate(String date)
{
    String[] dateParts = date.split("[-\\.:/]");
    int day = Integer.parseInt(dateParts[0]);
    int month = Integer.parseInt(dateParts[1]);
    int year = Integer.parseInt(dateParts[2]);

    return new SimpleDateTime(dag, maand, jaar);
}
Run Code Online (Sandbox Code Playgroud)

这里使用的构造函数:

public SimpleDateTime(int day, int month, int year)
{
    date = Calendar.getInstance();
    date.setLenient(true);
    setDay(day);
    setMonth(month);
    setYear(year);
}
Run Code Online (Sandbox Code Playgroud)

日,月和年的制定者:

public void setYear(int year)
{
    date.set(Calendar.YEAR, year);
}

public void setMonth(int month)
{
    date.set(Calendar.MONTH, month);
}

public void setDay(int day)
{
    date.set(Calendar.DAY_OF_MONTH, day);
}
Run Code Online (Sandbox Code Playgroud)

用于格式化日期的代码:

public String toString(String pattern)
{
    String output = new SimpleDateFormat(pattern, Locale.getDefault()).format(date.getTime());
    return output;
}
Run Code Online (Sandbox Code Playgroud)

传递模式的地方是:

"dd/MM/yy"
Run Code Online (Sandbox Code Playgroud)

打算将日期打印为:

16/09/13
23/09/13
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

16/10/13
23/10/13
Run Code Online (Sandbox Code Playgroud)

pet*_*rov 5

1月份Java为0; 二月是1,依此类推.

Calendar.JANUARY,Calendar.FEBRUARY.

因此,当你从文件中读取1时,
你认为你读过JAN,但你读的是FEB.

你应该这样做:date.set(Calendar.MONTH, month-1);解决这个问题.