我正在从Active Directory中获取日期值(createWhen),并将其转换为Java日期,以获取两个日期之间创建的帐户的列表。除一种方法外,一切工作正常:从AD Date到Java date的方法。该方法如下所示:
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: 20190912190509.0Z
Formatted String is: 2019/09/12
Final date string is: Wed Jan 12 00:00:00 EST 2019
显然,它正确地获取了日期和年份(如果我选择包括时/分/秒,则也正确地包含了它们),但是由于某种原因,每个日期都被安排在1月。
现在,我确定我的错误是一个非常简单的错误,但是我已经对格式进行了大约十次的重新检查,现在我再也看不到它了。可以再希望有一双眼睛看我的代码并指出我错在哪里使月份如此严重吗?
将模式字符串从“ yyyy / MM / DD”更改为“ yyyy / MM / dd”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");