web-dev-qa-db-ja.com

JodaTimeで特定の月の最終日を取得する方法は?

最初の日付を取得する必要があります(org.joda.time.LocalDate)1か月と最後の1か月。最初のものを取得するのは簡単ですが、最後のものを取得するには月の長さが異なり、2月の長さも年によって異なるため、何らかのロジックが必要なようです。 JodaTimeにすでに組み込まれているメカニズムはありますか、それとも自分で実装する必要がありますか?

106
Ivan

どうですか:

_LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();
_

dayOfMonth()は、元のLocalDateを認識する方法で「月の日」フィールドを表す_LocalDate.Property_を返します。

たまたまwithMaximumValue()メソッドは documented でさえあり、この特定のタスクに推奨しています:

この操作は、月の長さが異なるため、月の最終日にLocalDateを取得するのに役立ちます。

_LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();
_
211
Jon Skeet

別の簡単な方法は次のとおりです。

//Set the Date in First of the next Month:
answer = new DateTime(year,month+1,1,0,0,0);
//Now take away one day and now you have the last day in the month correctly
answer = answer.minusDays(1);

古い質問ですが、これを探していたときのトップのGoogle結果です。

誰かがJodaTimeを使用する代わりにintとして実際の最終日を必要とする場合、これを行うことができます:

public static final int JANUARY = 1;

public static final int DECEMBER = 12;

public static final int FIRST_OF_THE_MONTH = 1;

public final int getLastDayOfMonth(final int month, final int year) {
    int lastDay = 0;

    if ((month >= JANUARY) && (month <= DECEMBER)) {
        LocalDate aDate = new LocalDate(year, month, FIRST_OF_THE_MONTH);

        lastDay = aDate.dayOfMonth().getMaximumValue();
    }

    return lastDay;
}
1
wiredniko