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


110

org.joda.time.LocalDate月の最初の日付(として)と最後の日付を取得する必要があります。最初のものを取得するのは簡単ですが、最後のものを取得するにはいくつかのロジックが必要と思われます。JodaTimeに既に組み込まれているメカニズムはありますか、それとも自分で実装する必要がありますか?


2
ただのヘッドアップ、これはDateTimeタイプでも機能します:)
vikingsteve '26

回答:


222

どうですか:

LocalDate endOfMonth = date.dayOfMonth().withMaximumValue();

dayOfMonth()LocalDate.Property「月の日」フィールドを表すa を返しますLocalDate

たまたま、この特定のタスクに推奨するためのwithMaximumValue()方法も文書化されています。

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

LocalDate lastDayOfMonth = dt.dayOfMonth().withMaximumValue();

1
@Jon Skeet Java 8の新しい日付と時刻のAPIを使用してこれを取得する方法は?
Warren M. Nocos

5
@ WarrenM.Nocos:使用しますdt.with(TemporalAdjusters.lastDayOfMonth())
Jon Skeet、

4

別の簡単な方法はこれです:

//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);

4
月が12の場合はどうなりますか?
2018

JodaTime APIは、洗練された、完全にロードされた、便利な作業です。これを実現するには、他にも多くのより正確な方法があります。
aaiezza

月が12の場合、最後の日は31日だとわかりますか?次のように入力するだけです:if(month <12){answer = new DateTime(year、month + 1,1,0,0,0); 答え= answer.minusDays(1); }その他の回答= 31;
アブラハムマルドナドバリオス

1

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

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

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
私は、次のような少しすっきりとした答えを望んでいました。少し雑然としていても、とても役立つので、+ 1;)
jumps4fun

-1

JodaTimeを使用して、これを行うことができます。

    public static final Integer CURRENT_YEAR = DateTime.now()。getYear();

    public static final Integer CURRENT_MONTH = DateTime.now()。getMonthOfYear();

    public static final Integer LAST_DAY_OF_CURRENT_MONTH = DateTime.now()
            .dayOfMonth()。getMaximumValue();

    public static final Integer LAST_HOUR_OF_CURRENT_DAY = DateTime.now()
            .hourOfDay()。getMaximumValue();

    public static final Integer LAST_MINUTE_OF_CURRENT_HOUR = DateTime.now()。minuteOfHour()。getMaximumValue();

    public static final Integer LAST_SECOND_OF_CURRENT_MINUTE = DateTime.now()。secondOfMinute()。getMaximumValue();


    public static DateTime getLastDateOfMonth(){
        新しいDateTime(CURRENT_YEAR、CURRENT_MONTH、
                LAST_DAY_OF_CURRENT_MONTH、LAST_HOUR_OF_CURRENT_DAY、
                LAST_MINUTE_OF_CURRENT_HOUR、LAST_SECOND_OF_CURRENT_MINUTE);
    }

ここでgithubの私の小さな要点で説明しているように: 多くの便利な機能を備えたJodaTimeとjava.util.Date Utilクラス。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.