본문 바로가기
나만의 Function Library/Java

[JAVA] 시작시간과 끝시간이 있을때 시간별 점유하는 시간(분) 계산

by 개발자 찬덕이 2022. 11. 1.
List<ReportDayDataVo> dayDataList = new ArrayList<>();
for ( int i=0 ; i<24 ; i++ ) {
    ReportDayDataVo reportDayDataVo = new ReportDayDataVo();
    reportDayDataVo.setPeriod(i);
    reportDayDataVo.setActivityDist(0);
    reportDayDataVo.setActivitySec(0);
    reportDayDataVo.setDataFlag(false);
    dayDataList.add(reportDayDataVo);
}
LocalDateTime strDt = vo.getPlyStrDtm(); // 시작시간
LocalDateTime endDt = vo.getPlyEndDtm(); // 종료시간
int strHour = strDt.getHour();
int endHour = endDt.getHour();
int strMin = strDt.getMinute();
int endMin = endDt.getMinute();

Duration duration = Duration.between(strDt, endDt);
int durationMin = (int)duration.getSeconds() / 60;
List<Integer> minList = new ArrayList<>();
do {
    // 같은 시간대
    if (strHour == endHour) {
        minList.add(endMin-strMin);
        durationMin = 0;
    }
    // 남은 시간이 60분 이하라면
    else if (durationMin < 60) {
        minList.add(endMin);
        durationMin = 0;
    }
    // 첫 데이터
    else if (minList.size() == 0) {
        minList.add(60-strMin);
        durationMin -= (60-strMin);
    }
    // 나머지는 60분
    else {
        minList.add(60);
        durationMin -= 60;
    }
} while (durationMin > 0);
int minIdx = 0;
for (int idx=strHour ; idx<=endHour ; idx++ ) {
    ReportDayDataVo tmp = dayDataList.get(idx);
    tmp.setActivitySec(tmp.getActivitySec() + minList.get(minIdx));
    minIdx++;
}