0

因为我不是处理 Java 日期的专家,但我无法理解这种行为。
这是我的代码

Date from = new SimpleDateFormat("dd/MM/yyyy").parse("05/07/2013");
System.out.println(from);


这给了我这个输出

Sat Jul 05 00:07:00 PKT 2013


这是第二个代码片段

Date from = new SimpleDateFormat("dd/mm/yyyy").parse("05/07/2013");
System.out.println(from);


这给了我这个输出:
Sat Jan 05 00:07:00 PKT 2013

现在重要的是格式。
这种格式dd/MM/yyyyMM了我正确的输出,但这种格式dd/mm/yyyy很小mm给了我错误的输出(总是jan在月份给出)。我阅读了文档,其中提到 samll m 是分钟,大写 M 是一个月
我的问题是我可以从不在这里使用小 m 吗?如果不是,那么为什么给出结果以及jan每次

我知道这是一个基本问题时给出的结果,但是在搜索并没有找到任何可以理解的东西之后,我发布了它。谢谢

4

5 回答 5

4
Date from = new SimpleDateFormat("dd/mm/yyyy").parse("05/07/2013");

你的mm格式是几分钟。MM是一个月。

这些格式占位符是固定的。小 m 始终是分钟。这是一月,因为这是默认的月份值。

于 2013-05-07T08:19:03.267 回答
4

mm 表示分钟,因此您的日期中没有任何月份。因此,我猜这个月份被初始化为 0(Jan)

于 2013-05-07T08:20:02.847 回答
0

它没有失败的原因是因为默认情况下格式化程序是宽松的。如果你想让它失败,那么setLenient(false)在格式化程序对象上。

尽管我认为在您的情况下它不会失败,因为在您的示例中它将 07 读取为分钟。

于 2013-05-07T08:23:02.190 回答
0

使用时

Date from = new SimpleDateFormat("dd/mm/yyyy").parse("05/07/2013");

简单的 mm 表示分钟,因此我认为月份的值假定为 0,因此它将 Jan 作为默认值,因此使用 MM 表示月份。

于 2013-05-07T08:23:47.250 回答
0

我猜它来自calendar.clear()哪个将指向 1970 年 1 月 1 日。然后它会添加您解析的数据 = 2013 年 (YY)、5 天 (dd) 和 7 分钟 (mm)。使用MM一个月

于 2013-05-07T08:24:54.697 回答