我已经验证了从文件中正确读取日期,但是一旦我将 SimpleDateFormat.format
与模式 "dd/MM/yy"
一起使用,它就会突然添加一个月。这让我相信宽松模式正在计算错误的值。但我不知道是什么让它增加了整整一个月。
我阅读的一些示例日期:
16/09/2013
23/09/2013
30/09/2013
07/10/2013
14/10/2013
21/10/2013
用于解析日期的代码(它是我制作的 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);
}
这里使用的构造函数:
public SimpleDateTime(int day, int month, int year)
{
date = Calendar.getInstance();
date.setLenient(true);
setDay(day);
setMonth(month);
setYear(year);
}
日、月、年的 setter :
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);
}
以及用于格式化日期的代码:
public String toString(String pattern)
{
String output = new SimpleDateFormat(pattern, Locale.getDefault()).format(date.getTime());
return output;
}
模式传递的地方是:
"dd/MM/yy"
打算将日期打印为:
16/09/13
23/09/13
相反,我得到:
16/10/13
23/10/13
最佳答案
一月在 Java 中为 0;二月是 1,以此类推。
参见 Calendar.JANUARY
、Calendar.FEBRUARY
。
所以当你从文件中读取 1 时
你以为你读的是 JAN,但你读的是 FEB。
你应该这样做:date.set(Calendar.MONTH, month-1);
来解决这个问题。
关于java - 为什么我打印的日期不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21430860/