乔达:如何在两个日期之间获得数月和数天

我想我在这里错过了一些微妙之处,因为我正在阅读的所有内容都说这应该起作用。 我需要获取Android中两个日期之间的月份和日期。 也就是说,整整几个月加上任何额外的日子。 我需要这个数字输出,而不是一个打印的字符串。 我在做什么,使用乔达:

void method(DateTime begin, DateTime end) {
    Period period = Period period = new Period(begin, end);
    final int months = period.getMonths();
    final int additionalDays = period.getDays();

问题是additionalDays始终为零。 例如,2015年7月1日至2015年11月29日应该会有4个月和29天,但我会得到4个月零天。


从文档Period.getDays()将返回0,如果它不受支持。 我不确定为什么这不会被支持,但我想提供一种不同的方法:使用DaysMonths类以及它们的monthsBetween()daysBetween()方法。 请注意,您也必须减去两个月之间的月份:

// Get months
int months = Months.monthsBetween(begin, end).getMonths();
// Subtract this number of months from the end date so we can calculate days
DateTime newEnd = end.minusMonths(months);
// Get days
int days = Days.daysBetween(begin, newEnd).getDays();

如果你不在中间进行这种减法,你会得到不正确的结果,因为你会得到所有的日子。


您使用的Period构造函数的javadoc

new Period(begin, end);

状态

使用标准字段集从给定间隔端点创建一段时间。

换句话说,它相当于

Period period = new Period(startTime, endTime, PeriodType.standard());

PeriodType#standard()方法返回支持周字段的PeriodType

从2015年7月1日到2015年11月29日,您的期限实际上是4个月28天,28天转换为4周。 所以你的Period对象实际上是4个月和4周。

如果你曾试图创造一个Period从2015年7月1日至十一月30日2015年,你有4个月,4周,1天。

相反,请使用仅支持年,月和日字段的PeriodType#yearMonthDay()创建Period

period = new Period(begin, end, PeriodType.yearMonthDay());

那么你就会有一个Period有4个月,28天,因为它不支持周。

链接地址: http://www.djcxy.com/p/36735.html

上一篇: Joda: how to get months and days between two dates

下一篇: Get month name from Date