Java 当间隔大于一年时,jodatime会截断剩余的月份
我尝试使用以下代码检查给定间隔是否大于12个月:Java 当间隔大于一年时,jodatime会截断剩余的月份,java,jodatime,Java,Jodatime,我尝试使用以下代码检查给定间隔是否大于12个月: public void testMonths() throws Exception { DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-mm"); DateTime from = format.parseDateTime("2010-01"); DateTime until = format.parseDateTime("2011-06");
public void testMonths() throws Exception {
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-mm");
DateTime from = format.parseDateTime("2010-01");
DateTime until = format.parseDateTime("2011-06");
int months = Months.monthsBetween(from, until).getMonths();
assertTrue(months > 12); // months = 12 for some reason.
}
当给定的间隔超过一年时,它将截断去年的剩余月份
输入我已尝试运行的:
15 months will return 12 months.
25 months will return 24 months.
36 months will return 36 months.
37 months will return 36 months.
问题在于你的文本模式。“mm”是指“分钟”而不是“月”。如果您将模式更改为
“yyyy-MM”
,您会发现它工作正常
作为指导原则,在这样的情况下,我要做的第一件事就是尽量把这个问题隔离到最小可能的问题上。因此,将文本解析和DateTime
(时区等)的复杂性从等式中剔除:
LocalDate from = new LocalDate(2010, 1, 1);
LocalDate to = new LocalDate(2011, 6, 1);
int months = Months.monthsBetween(from, to).getMonths();
现在你会看到它是17。因此,下一步是返回原始代码,并打印出from
和to
的值。。。你会看到这样的情况:
基本上,避免文本解析,除非这是您试图诊断的问题的基本部分。问题在于您的文本模式。“mm”是指“分钟”而不是“月”。如果您将模式更改为
“yyyy-MM”
,您会发现它工作正常
作为指导原则,在这样的情况下,我要做的第一件事就是尽量把这个问题隔离到最小可能的问题上。因此,将文本解析和DateTime
(时区等)的复杂性从等式中剔除:
LocalDate from = new LocalDate(2010, 1, 1);
LocalDate to = new LocalDate(2011, 6, 1);
int months = Months.monthsBetween(from, to).getMonths();
现在你会看到它是17。因此,下一步是返回原始代码,并打印出from
和to
的值。。。你会看到这样的情况:
基本上,避免文本解析,除非这是您试图诊断的问题的基本部分。谢谢您的帮助和建议,您回答了这个问题。谢谢您的帮助和建议,您回答了这个问题。