JAvaはLocalDateを用いて開始時間と終了時間から週のリストを算出する
10221 ワード
一般的に私たちはデータ統計の中で出会うことができて、毎日のデータによって、毎週、毎月成約量のデータは展示します
/**
* -
*/
public class Week implements Serializable{
/** (2018-06-01~2018-06-10) **/
private String day;
/** **/
private LocalDate startTime;
/** **/
private LocalDate endTime;
/** **/
private Integer startTimeNumber;
/** **/
private Integer endTimeNumber;
// get set
} /** * * @param startTime * @param endTime * @return */ public static List
getWeekList(LocalDate startTime, LocalDate endTime) { List resultList = new ArrayList (); DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyyMMdd"); // WeekFields weekFields = WeekFields.of(DayOfWeek.MONDAY,4); if(startTime.get(weekFields.weekOfWeekBasedYear()) == endTime.get(weekFields.weekOfWeekBasedYear())){ Week firstWeek = new Week(); firstWeek.setDay(startTime + "~" + endTime); firstWeek.setStartTime(startTime); firstWeek.setEndTime(endTime); firstWeek.setStartTimeNumber(Integer.valueOf(df.format(startTime))); firstWeek.setEndTimeNumber(Integer.valueOf(df.format(endTime))); resultList.add(firstWeek); return resultList; } // TemporalAdjuster FIRST_OF_WEEK = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.minusDays(localDate.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue())); LocalDate startFirstWeek = startTime.with(FIRST_OF_WEEK); // TemporalAdjuster LAST_OF_WEEK = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(DayOfWeek.SUNDAY.getValue() - localDate.getDayOfWeek().getValue())); LocalDate endFirstWeek = startTime.with(LAST_OF_WEEK); // // TemporalAdjuster FIRST_OF_WEEK1 = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.minusDays(localDate.getDayOfWeek().getValue() - DayOfWeek.MONDAY.getValue())); LocalDate startLastWeek = endTime.with(FIRST_OF_WEEK1); TemporalAdjuster LAST_OF_WEEK1 = TemporalAdjusters.ofDateAdjuster(localDate -> localDate.plusDays(DayOfWeek.SUNDAY.getValue() - localDate.getDayOfWeek().getValue())); LocalDate endLastWeek = endTime.with(LAST_OF_WEEK1); // Week firstWeek = new Week(); firstWeek.setDay(startTime + "~" + endFirstWeek); firstWeek.setStartTime(startTime); firstWeek.setEndTime(endFirstWeek); firstWeek.setStartTimeNumber(Integer.valueOf(df.format(startTime))); firstWeek.setEndTimeNumber(Integer.valueOf(df.format(endFirstWeek))); resultList.add(firstWeek); while (true) { startFirstWeek = startFirstWeek.plusDays(7); if (startFirstWeek.with(LAST_OF_WEEK).equals(startLastWeek.with(LAST_OF_WEEK1))) { break; } else { Week week = new Week(); week.setDay(startFirstWeek.with(FIRST_OF_WEEK) + "~" + startFirstWeek.with(LAST_OF_WEEK)); week.setStartTime(startFirstWeek.with(FIRST_OF_WEEK)); week.setEndTime(startFirstWeek.with(LAST_OF_WEEK)); week.setStartTimeNumber(Integer.valueOf(df.format(startFirstWeek.with(FIRST_OF_WEEK)))); week.setEndTimeNumber(Integer.valueOf(df.format(startFirstWeek.with(LAST_OF_WEEK)))); resultList.add(week); //System.out.println(" ="+startFirstWeek+" ="+startFirstWeek.with(FIRST_OF_WEEK)+" ="+startFirstWeek.with(LAST_OF_WEEK)); } } Week lastWeek = new Week(); lastWeek.setDay(startLastWeek + "~" + endTime); lastWeek.setStartTime(startLastWeek); lastWeek.setEndTime(endTime); lastWeek.setStartTimeNumber(Integer.valueOf(df.format(startLastWeek))); lastWeek.setEndTimeNumber(Integer.valueOf(df.format(endTime))); resultList.add(lastWeek); return resultList; }
結果は次のとおりです.
日付=2018-05-02~2018-05-06開始週=2018-05-02終了週=2018-05-06開始タイムスタンプ=20180502終了タイムスタンプ=20180506日付=2018-05-07~2018-05-13開始週=2018-05-13終了週=2018-05-13開始タイムスタンプ=20180507終了タイムスタンプ=20180513日=2018-05-14開始週=2018-05-14終了週=2018-05-14開始週=2018-05-20開始タイムスタンプ=20180514終了タイムスタンプ=20180520日付=2018-05-21~2018-05-27開始週=2018-05-21終了週=2018-05-27開始タイムスタンプ=20180521終了タイムスタンプ=20180527日付=2018-05-28~2018-06-03開始週=2018-05-28終了週=2018-06-03開始タイムスタンプ=20180528終了タイムスタンプ=20180603日付=2018-06-04開始週=2018-06-04終了週=2018-06-10開始タイムスタンプ=20180604終了タイムスタンプ=201806060日付=2018-06-11~2018-06-17開始週=2018-06-11終了週=2018-06-17開始タイムスタンプ=20180611終了タイムスタンプ=20180617日付=2018-06-18~2018-06-24開始週=2018-06-18終了週=2018-06-24開始タイムスタンプ=20180618終了タイムスタンプ=20180624日付=2018-06-25開始週=2018-06-25終了週=2018-06-30開始タイムスタンプ=20180625終了タイムスタンプ=201806302.LocalDate時間による当月の初日と最終日の照会LocalDate firstDay = LocalDate.now().with(TemporalAdjusters.firstDayOfMonth()); LocalDate lastDay = LocalDate.now().with(TemporalAdjusters.lastDayOfMonth()); System.out.println(" ="+firstDay); System.out.println(" ="+lastDay); : =2018-06-01 =2018-06-30