Java SimpleDateFormat 总是在 1 月返回月份

2022-09-02 00:22:31

我正在努力从Active Directory中获取日期值(createWhen),并将其转换为Java日期,以便获取在两个日期之间创建的帐户列表。一切正常,除了一种方法:我从AD日期到Java日期的方法。该方法如下所示:

private Date getParsedDate(String givenString) {
    System.out.println("Value from AD is: " + givenString);
    Date parsedDate = null;
    String formattedString = this.formatDateString(givenString);
    System.out.println("Formatted String is: " + formattedString);
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/DD");
    try {
        parsedDate = sdf.parse(formattedString);
        System.out.println("Final date string is: " + parsedDate.toString());
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return parsedDate;
}

而且,对于来自 AD 的单个任意数据:

Value from AD is: 20050912190509.0Z

Formatted String is: 2005/09/12

Final date string is: Wed Jan 12 00:00:00 EST 2005

显然,它正确地选择了日期和年份(如果我选择包括小时/分钟/秒,它也正确地包括了这些),但是由于某种原因,每个日期都被放在一月份。

现在,我确信我的错误是一个非常简单的错误,但是我已经重新检查了我的格式大约十次,并且我处于无法再看到它的地步。第二双眼睛可以有希望地查看我的代码,并指出我在哪里出错,使这个月如此严重不正确?

谢谢。


答案 1

将模式字符串从“yy/MM/DD”更改为“yyyy/MM/DD”

SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");

答案 2

确保不要使用“mm”而不是“MM”或“MMM”。小m表示分钟,大写M表示月。


推荐