乔达:如何在两个日期之间获得数月和数天
我想我在这里错过了一些微妙之处,因为我正在阅读的所有内容都说这应该起作用。 我需要获取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,如果它不受支持。 我不确定为什么这不会被支持,但我想提供一种不同的方法:使用Days
和Months
类以及它们的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天,因为它不支持周。