java - 为什么我打印的日期不对?

标签 java android datetime

我已经验证了从文件中正确读取日期,但是一旦我将 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.JANUARYCalendar.FEBRUARY

所以当你从文件中读取 1 时
你以为你读的是 JAN,但你读的是 FEB。

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

关于java - 为什么我打印的日期不对?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21430860/

相关文章:

Apache Axis 2 中没有时区的 Java 日历

java - Hibernate 空间服务配置错误

java - java中文件的状态

java - 如何将链接视频从 ok.ru 转换为直接链接以在 VideoPlayer android 上播放

Android TabHost 示例

java - 将字符串类型日期更改为日期字符串

java - Robolectric - 应用程序在设置中有单例,导致测试问题

java - try with resources(Java 7) 中的 finally block 有什么用?

java.util.zip.ZipOutputStream - 更快地压缩大文件?

python - 如何比较 Django 中的日期时间?