jodatime截断间隔大于一年的剩余月份

时间:2014-03-19 14:08:25

标签: 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");

    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.

1 个答案:

答案 0 :(得分:4)

问题是你的文字模式。 "毫米"意味着"分钟"不是"月"。如果您将模式更改为"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.那么下一步就是回到原始代码,并打印出fromto的值。 ..而且你会看到之类的东西

2010-01-01T00:01:00.000Z
2011-01-01T00:06:00.000Z

基本上,请避免文本解析,除非您根本部分问题是您尝试诊断的。