月の最初と最後の日を取得する必要があるLocalDateがあります。それ、どうやったら出来るの?
例えば。 2014年2月13日LocalDate形式で2014年1月2日と2014年2月28日を取得する必要があります。
Threeten LocalDateクラスを使用します。
withDayOfMonth
とlengthOfMonth()
を使用するだけです:
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.withDayOfMonth(1);
LocalDate end = initial.withDayOfMonth(initial.lengthOfMonth());
APIは、ビジネス要件に密接に一致するソリューションをサポートするように設計されました
import static Java.time.temporal.TemporalAdjusters.*;
LocalDate initial = LocalDate.of(2014, 2, 13);
LocalDate start = initial.with(firstDayOfMonth());
LocalDate end = initial.with(lastDayOfMonth());
ただし、ジョンのソリューションも問題ありません。
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();
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());
誰かが前月の初日および前月の最終日を探している場合:
public static LocalDate firstDayOfPreviousMonth(LocalDate date) {
return date.minusMonths(1).withDayOfMonth(1);
}
public static LocalDate lastDayOfPreviousMonth(LocalDate date) {
return date.withDayOfMonth(1).minusDays(1);
}
これを試して:
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
そのパラメータはうるう年を示します
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);