Joda时间没有正确解析月份

Snu*_*ill 0 java time parsing date jodatime

我有这个简单的代码:

DateTimeFormatter format = DateTimeFormat.forPattern("YYYY MM DD");
DateTime dateTime;

String buffer = "2013 01 01";
dateTime = format.parseDateTime(buffer);
System.out.println(dateTime.getMonthOfYear());

buffer = "2013 02 01";
dateTime = format.parseDateTime(buffer);
System.out.println(dateTime.getMonthOfYear());
Run Code Online (Sandbox Code Playgroud)

输出为:1 1

但我希望:1 2

...问题出在哪儿?我不需要一年中的一个月,但我确定dayOfWeek有问题,因为dateTime始终是1月而不是其他月份.

Men*_*ild 6

@LuS给出的解决方案是正确的.我发表了解释.

在你的情况下,符号Y(JodaTime中的年代)或y(预感等年)之间的选择并不那么重要,因为在我们的现代,两年的数字都相同.符号M是正确的(对于每年的月份).所以让我们专注于DD与dd.

解决方案'd'有效,因为年/月/日的组合使解析器能够计算日历日期(平凡).如果缺少日期,那么解析器就不能再使用年和月来构建日期.

那D是什么?这是一年中的一天.由于要解析的字符串的相应数字部分在两种情况下均为"01",因此解析器将日期构造为ISO-Ordinal-Date,其中包含年份和年份(两个示例中的两者都相同),忽略(不同)月份部分.

当然,解析结果"2013-001"="2013-01-01"不适合输入"2013 02 01",因此在严格解析时,这应该失败.不幸的是,即使在严格模式下(测试用org.joda.time.chrono.StrictChronology),JodaTime也不会尝试检查解析信息的一致性.