这开始作为一个简单的错误:我有YYYY,而不是yyyy在我的格式字符串的SimpleDateFormat对象.但是我对使用不正确格式字符串的测试结果感到困惑.
这段代码:
@Test
public void whatTheHell() {
try {
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/YYYY");
Date d1 = sdf.parse("01/07/2016");
Date d2 = sdf.parse("02/08/2016");
Date d3 = sdf.parse("11/29/2027");
System.out.println(d1.toString());
System.out.println(d2.toString());
System.out.println(d3.toString());
} catch (ParseException pe) {
fail("ParseException: " + pe.getMessage());
}
}
Run Code Online (Sandbox Code Playgroud)
产生这个输出:
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2015
Sun Dec 27 00:00:00 PST 2026
Run Code Online (Sandbox Code Playgroud)
我在这里阅读了关于'Y'参数的文档:https://docs.oracle.com/javase/7/docs/api/java/util/GregorianCalendar.html,但我仍然看不到它的逻辑在这里工作.特别是最后一个例子:我可以有点理解1月(也可能是2月)的日期如何转化为上一年的12月,但将11月29日的日期向后移动11个月让我感到困惑.12月27日有什么特别之处?
谁能解释一下?
更多信息
@Jan建议依赖toString()方法可能是个问题,所以我定义了一个日期格式,以YYYY MM dd '-' yyyy MM dd …
我正在尝试接受用户输入的日期格式,例如:“2000 小时,星期四,2015 年 7 月 20 日”。然后我会将其转换为日期格式以对其进行操作。但从字符串到日期的转换默认月份为一月,日期为 1。以下是代码片段:
String userDateFormat = "HHmm 'hrs', EEEE, MMMM dd, YYYY";
SimpleDateFormat userDateFormatter = new SimpleDateFormat(userDateFormat);
String reference_date = "2000 hrs, Thursday, July 20, 2015";
Date date = null;
try {
date = userDateFormatter.parse(reference_date);
} catch (ParseException e) {
System.out.println("Date must be in the format " + userDateFormat);
}
System.out.println(userDateFormatter.format(date));
Run Code Online (Sandbox Code Playgroud)
以下方法块打印:2000 小时,星期四,2015 年 1 月 1 日。有任何线索吗?