Joda-Time:日期计算

时间:2013-05-31 14:09:10

标签: date jodatime period date-arithmetic

我想精确计算两个日期之间的月份来实现这一点,我做了类似的事情:

            DateTimeZone ZONE = DateTimeZone.forID("Europe/London");
            String DATE_FORMAT = "dd/MM/yyyy";
            DateTimeFormatter FORMATTER = DateTimeFormat.forPattern(DATE_FORMAT).withZone(ZONE);
            LocalDate dateTime = FORMATTER.parseLocalDate("28/05/2013");
            LocalDate dateTime6MonthAfter = FORMATTER.parseLocalDate("28/02/2014");
            Period todayUntilEndOfContract = new Period(dateTime,dateTime6MonthAfter);
            todayUntilEndOfContract.getMonths() +"M/"+ todayUntilEndOfContract.getWeeks() +"W/"+ todayUntilEndOfContract.getDays() +"D/");

所以这给我在2013年5月28日到2014年2月28日之间正好9个月但是! 当我计算日期(29,30,31)/ 05/2013和28/02/2014它总是给我9个月通常应该说8M / 3W /(6,5,4)D /为什么总是9M / 0W / 0D请......?

非常感谢

1 个答案:

答案 0 :(得分:2)

您的问题是您期望与提供的内容略有不同。如果我问你“1月30日加一个月是什么?”的问题。那么有许多不同的答案在不同的假设下是有效的。在Joda的案例中,答案是“2月28日”(如果是闰年,则为29日)。

虽然您要求提供基于月份的信息,但我建议您先获取天数并将其作为基础,因为它可能更接近您的需求:

int days = Days.daysBetween(dateTime, dateTime6MonthAfter).getDays();

您始终可以使用此号码反馈代码并获取不同的值以符合您的要求。