java - Joda 时间无法正确解析月份

标签 java parsing date time 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());

输出是: 1 1

但我希望: 1 2

...问题出在哪里?我不需要获取一年中的月份,但我在确定 dayOfWeek 时遇到问题,因为 dateTime 始终为一月而不是其他月份。

最佳答案

@LuS给出的解决方案是正确的。我提供解释

符号 Y(JodaTime 中的纪元)或 y(proleptic iso-year)之间的选择在您的情况下并不那么重要,因为在现代,这两个年份具有相同的数字。符号 M 是正确的(代表一年中的月份)。所以让我们集中讨论 DD 与 dd。

解决方案“d”有效,因为年/月/日的组合使解析器能够计算日历日期(微不足道)。如果缺少月份中的某一天,则解析器无法再仅使用年份和月份构造日期。

那么D是什么?它是一年中的某一天。由于要解析的字符串的相应数字部分在这两种情况下都是“01”,因此解析器将日期构造为带有年和日的 ISO-Ordinal-Date -of-year (在您的两个示例中两者相同),忽略(不同的)月份部分。

当然,解析结果“2013-001”=“2013-01-01”与输入“2013 02 01”不匹配,因此在严格解析中应该会失败。不幸的是,即使在严格模式下,JodaTime 也不会尝试检查解析信息的一致性(使用 org.joda.time.chrono.StrictChronology 进行测试)。

关于java - Joda 时间无法正确解析月份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23169761/

相关文章:

java - GUI 上仅打印第一行

javascript - 如何根据解析用户命令字符串为 HTML 元素着色

javaccspecialToken 的绝对偏移量

php - 获取过去 X 周的周数

python - 使用 panda 格式化 Excel 的日期输出

java - 如何在两个测试类之间共享ExternalResource?

java - Jboss:JSP中的EL表达式不起作用

C# 正则表达式 for/"在字符串末尾

MYSQL CURDATE() -7 在 1 月 1 日询问时省略 12 月的天数

java - 媒体播放器搜索栏搜索无法正常工作