我正在使用 joda-time 来获取两个日期之间的一些时间/日期组件。( http://joda-time.sourceforge.net )
当我将 PeriodTypes 用作standard()
orday()
时,一切正常。但是当我使用时,PeriodType.forFields(...)
我得到了一个例外:
所以,这有效:
Period p = new Period(new DateTime(startDate.getTime()), new DateTime(endDate.getTime()), PeriodType.days()).normalizedStandard(PeriodType.days());
return p.getDays();
这会引发异常:
Period p = new Period(new DateTime(startDate.getTime()), new DateTime(endDate.getTime()), PeriodType.forFields(new DurationFieldType[]{DurationFieldType.months(), DurationFieldType.weeks()})).normalizedStandard(PeriodType.forFields(new DurationFieldType[]{DurationFieldType.months(), DurationFieldType.weeks()}));
return p.getMonths();
任何想法我做错了什么?非常感谢任何帮助。
例外:
10-17 14:35:50.999:E/AndroidRuntime(1350):java.lang.UnsupportedOperationException:不支持字段 10-17 14:35:50.999:E/AndroidRuntime(1350):在 org.joda.time.PeriodType .setIndexedField(PeriodType.java:690) 10-17 14:35:50.999: E/AndroidRuntime(1350): 在 org.joda.time.Period.withYears(Period.java:896) 10-17 14:35:50.999 : E/AndroidRuntime(1350): 在 org.joda.time.Period.normalizedStandard(Period.java:1630)
编辑:
我很确定这是一个错误。我测试了更多组合,似乎没有年份的非标准 PeriodTypes 存在问题。例如:
这有效:
Period p = new Period(new DateTime(startDate.getTime()), new DateTime(endDate.getTime()), PeriodType.standard()).normalizedStandard(PeriodType.standard());
return p.getMonths();
如果我删除年份 PeriodType , withYearsRemoved()
我会得到一个例外:
Period p = new Period(new DateTime(startDate.getTime()), new DateTime(endDate.getTime()), PeriodType.standard().withYearsRemoved()).normalizedStandard(PeriodType.standard().withYearsRemoved());
return p.getMonths();