web-dev-qa-db-ja.com

Threeten、LocalDateを使用して月の最初と最後の日を取得する

月の最初と最後の日を取得する必要があるLocalDateがあります。それ、どうやったら出来るの?

例えば。 2014年2月13日LocalDate形式で2014年1月2日と2014年2月28日を取得する必要があります。

Threeten LocalDateクラスを使用します。

90
user1746050

withDayOfMonthlengthOfMonth()を使用するだけです:

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.lengthOfMonth());
142
Jon Skeet

APIは、ビジネス要件に密接に一致するソリューションをサポートするように設計されました

import static Java.time.temporal.TemporalAdjusters.*;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());

ただし、ジョンのソリューションも問題ありません。

125
JodaStephen

YearMonth

完全を期すため、そして私の意見ではよりエレガントにするには、この YearMonth クラスの使用を参照してください。

YearMonth month = YearMonth.from(date);
LocalDate start = month.atDay(1);
LocalDate end   = month.atEndOfMonth();

今月の最初と最後の日については、次のようになります。

LocalDate start = YearMonth.now().atDay(1);
LocalDate end   = YearMonth.now().atEndOfMonth();
43
herman

Jon Skeetsの答えは正しいですし、私の賛成票に値します、完全性のためにこのわずかに異なるソリューションを追加するだけです:

import static Java.time.temporal.TemporalAdjusters.lastDayOfMonth;

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.with(lastDayOfMonth());
15
Meno Hochschild

誰かが前月の初日および前月の最終日を探している場合:

public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
        return date.minusMonths(1).withDayOfMonth(1);
    }


public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
        return date.withDayOfMonth(1).minusDays(1);
    }
2
Anil Bhaskar

これを試して:

LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);         
LocalDate end = initial.withDayOfMonth(initial.getMonthOfYear().getLastDayOfMonth(false));
System.out.println(start);
System.out.println(end);

望みの出力を見つけることができますが、パラメータの世話をする必要がありますtrue/false for getLastDayOfMonth method

そのパラメータはうるう年を示します

1
Shekhar Rajput

localDateクラスのみでそれを行いたい場合:

LocalDate initial = LocalDate.of(2014, 2, 13);

LocalDate start = LocalDate.of(initial.getYear(), initial.getMonthValue(),1);

// Idea: the last day is the same as the first day of next month minus one day.
LocalDate end = LocalDate.of(initial.getYear(), initial.getMonthValue(), 1).plusMonths(1).minusDays(1);
0
MrSmith42