我正在从 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 的单个任意数据:
来自 AD 的值为:20050912190509.0Z
格式化字符串为:2005/09/12
最终日期字符串为:Wed Jan 12 00:00:00 EST 2005
显然,它正确地选择了日期和年份(如果我选择包括小时/分钟/秒,它也正确地包括那些),但是每个日期都被放置在一月份某种原因。
现在,我确信我的错误是一个非常简单的错误,但我已经重新检查了我的格式大约十次,现在我已经看不到它了。第二双眼睛能否有希望地检查我的代码并指出我哪里出了问题,让月份如此严重不正确?
谢谢。
最佳答案
将模式字符串从“yyyy/MM/DD”更改为“yyyy/MM/dd”
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd");
关于Java SimpleDateFormat 总是返回一月份的月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3560279/