joda-time を使用して、2 つの日付の間の時間/日付コンポーネントを取得しています。( http://joda-time.sourceforge.net )
PeriodTypes をstandard()
orとして使用するday()
と、すべて正常に動作します。しかし、使用する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): at 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();