Java SimpleDataFormat解析异常

Java SimpleDataFormat解析异常,java,simpledateformat,Java,Simpledateformat,我很困惑为什么这不起作用。不管我把日期改成什么,它都会打印出同样的内容。这是怎么回事 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您使用的是yyy,它是周年,而不是“正常”年。这通常只与星期几和一年

我很困惑为什么这不起作用。不管我把日期改成什么,它都会打印出同样的内容。这是怎么回事

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

您使用的是
yyy
,它是周年,而不是“正常”年。这通常只与星期几和一年中的星期说明符一起使用

这里的确切行为很难解释——可行,但没有太大帮助。基本上,解决办法是“不要那样做”。您需要的格式字符串是
MM/dd/yyyy
——请注意
yyyy
的大小写

(作为旁注,如果您可以使用java 8或Joda time中的
java.time.*
,您在java中的日期/时间问题会更好。这不会影响此特定问题,但通常是个好主意……

使用

SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy")
而不是

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

我想了解一下
YYYY
格式是如何工作的,因为它在英国
Locale
Mon Jan 03 00:00:00 EET 2000
)产生了不同的结果。如果Java有一个类型安全的格式化程序来防止像这样容易出错,那就太好了(同样是
dd
MM
的情况)。哇,毁掉一切是多么愚蠢的事情啊!我工作的需求是大写的,所以我只是盲目地使用它。