public class DateComparisonUsingLocalDate { LocalDate now = LocalDate.now(); String beginningOfMonth = now.withDayOfMonth(1).format(DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US)); String today = now.format(DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US)); String yesterday = now.minusDays(1).format(DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.US)); SimpleDateFormat formatter = new SimpleDateFormat("MM/dd/yyyy"); void checkIfSameDay() throws Exception { String startDateStr = "03/03/2011"; String endDateStr = "03/03/2011"; Date endDate = formatter.parse(endDateStr); boolean isSameDay; isSameDay = DateUtils.isSameDay(formatter.parse(beginningOfMonth), formatter.parse(startDateStr)); System.out.println("==1==" + isSameDay); isSameDay = DateUtils.isSameDay(formatter.parse(yesterday), endDate); System.out.println("==2==" + isSameDay); isSameDay = DateUtils.isSameDay(formatter.parse(yesterday), formatter.parse(startDateStr)); System.out.println("==3==" + isSameDay); isSameDay = DateUtils.isSameDay(formatter.parse(yesterday), endDate); System.out.println("==4==" + isSameDay); } }
/** * 指定された日と曜日の組み合わせのうち、最も今日に近い過去日を検索します。 * * @param dayOfMonth 日 * @param dayOfWeek 曜日 * @return 検索された日 */ public static LocalDate lookForRecentDayOf(int dayOfMonth, DayOfWeek dayOfWeek) { LocalDate now = LocalDate.now(); // return Stream.iterate(now.withDayOfMonth(1), date -> date.minusMonths(1)) // // 本日の年月初日から、一月ずつ遡っていくストリームを生成する // .filter(date -> checkLastDate(date, dayOfMonth)) // // 末日が引数日より小さい月をフィルター // .filter(date -> check(date, dayOfMonth, dayOfWeek)) // // 該当日の曜日・過去日でないかをチェック // .findFirst() // 最初の1件を探索し返却 // .get(); return Stream.iterate( now.withDayOfMonth(1), date -> date.minusMonths(1)) // 本日の年月初日から、一月ずつ遡っていくストリームを生成する .filter(date -> date.lengthOfMonth() >= dayOfMonth) // 月末日が対象引数日以上の月を選択 .map(date -> date.withDayOfMonth(dayOfMonth)) // 年月初日から引数日にマップ .filter(date -> date.getDayOfWeek().equals(dayOfWeek)) // 引数曜日と同じ日を選択 .filter(date -> date.isBefore(now)) // 過去日を選択 .findFirst() // 最初を選択し返却 .get(); }