Java SimpleDateFormat 解析异常

Java SimpleDateFormat parsing oddity

我很困惑为什么这不起作用。无论我将日期更改为什么,它都会打印出相同的内容。这是怎么回事?

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
String s = "11/22/2000";
Date d = sdf.parse(s);
System.out.println(d.toString());

输出:Sun Dec 26 00:00:00 CST 1999

您使用的 YYYY 是周年而不是 "normal" 年。这通常只与星期几和一年中的星期说明符一起使用。

这里的 确切 行为很难解释 - 可行,但不是很有帮助。基本上解决方案是"don't do that"。您需要 MM/dd/yyyy 的格式字符串 - 请注意 yyyy.

的大小写

(作为旁注,如果您可以使用 Java 8 或 Joda Time 中的 java.time.*,您将在 Java 和 date/time 问题。它不会影响这个特定问题,但通常是个好主意...)

使用

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

而不是

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