• 8버전부터 날짜와 시간을 다루는 클래스인 LocalDate, LocalTime, LocalDateTime이 추가되었다 (java.time)
  • DateCalendar 클래스 사용을 지양하자 (java.util)

1. LocalDate

  • 날짜만 사용할 사용
LocalDate today = LocalDate.now();              // 현재 날짜 출력 (2021-10-05)
LocalDate date = LocalDate.of(2021, 10, 04);    // 특정 날짜 출력 (2021-10-04)

date.getYear();         // 연도 : 2021
date.getMonth();        // 월 : OCTOBER
date.getMonthValue();   // 월 : 10
date.getDateOfMonth();  // 일 : 4
date.getDayOfYear();    // 올해 며칠 쨰 : 277
date.getDayOfWeek();    // 요일 : MONDAY
date.isLeapYear();      // 운년여부 : false

// LocalDate -> String
date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));

// String -> LocalDate
LocalDate.parse("2021-10-05");

// LocalDate -> LocalDateTime
date.atTime(2, 30);

2. LocalTime

  • 시간만 사용할 사용
LocalTime now = LocalTime.now();                // 현재 시간 출력 (15:13:41)
LocalTime time = LocalTime.of(12, 32, 52, 22);  // 특정 시간 출력 (12:32:52.0000022)

time.getHour();     // 시 : 12
time.getMinute();   // 분 : 32
time.getSecond();   // 초 : 52
time.getNano();     // 밀리초 : 22

3. LocalDateTime

  • 날짜와 시간 모두 사용할 사용
LocalDateTime now = LocalDateTime.now();                        // 2021-10-05T15:13:41
LocalDateTime time = LocalDateTime.of(2021, 10, 05, 12, 32);    // 2021-10-05T12:32:00
// LocalDate + LocalTime 조합
LocalDateTime time2 = LocalDatetime.of(LocalDate.now(), LocalTime.now());

// LocalDateTime -> String
time.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

// String -> LocalDateTime
LocalDateTime.parse("2021-10-05T12:32:52");
LocalDateTime.parse("2021-10-05 12:32:52", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));

// LocalDateTime -> LocalDate
LocalDate.from(time);

날짜 계산

날짜 덧셈, 뺄셈

  • plus@@@(), minus@@@() 메서드
LocalDateTime now = LocalDateTime.now();

now.plusYears(1);    // 년
now.plusMonths(1);   // 달
now.plusWeeks(1);    // 주
now.plusDays(1);     // 일
now.plusHours(1);    // 시
now.plusMinutes(1);  // 분
now.plusSeconds(1);  // 초
now.plusNanos(1);    // 밀리초

날짜 비교

  • isBefore() isAfter() isEqual() 메서드
LocalDateTime now = LocalDateTime.now();
LocalDateTime target = LocalDateTime.of(2020, 10, 05, 12, 32);

now.isBefore(target);   // false
now.isAfter(target);   // true
now.isEqual(target);   // false

날짜 차이 계산

  • Period 클래스
LocalDate now = LocalDate.now();
LocalDate target = LocalDate.of(2021, 09, 05);

Period period = Period.between(now, target);

period.getYears();      // 0년
period.getMonths();     // 1개월
period.getDays();       // 0일
  • 시간 기준으로 계산하기 (ChronoUnit)
LocalDate now = LocalDate.now();
LocalDate target = LocalDate.of(2021, 09, 05);

ChronoUnit.DAYS.between(now, target);   // 30일

시간 차이 계산

  • Duration 클래스
LocalTime now = LocalTime.now();  // 17:14:55
LocalTime target = LocalTime.of(18,17,35);

Duration duration = Duration.between(now, target);

duration.getSeconds();      
duration.getNano();

4. YearMonth

  • 년과 월만 사용할 경우 사용할 수 있는 클래스 (yyyy-MM)
YearMonth date = YearMonth.of(2021, 10);     // 2021-10

date.getYear();             // 2021
date.getMonth();            // OCTOBER
date.getMonthValue());      // 10
date.atEndOfMonth();        // 2021-10-31
date.lengthOfMonth();       // 31
date.plusMonth(1);          // 2021-11
date.minusMonth(1);         // 2021-09
  • 한달 기준으로 검색하기
public String requestList(YearMonth date, Model model) {
    LocalDateTime start = LocalDateTime.of(date.getYear(), date.getMonth(), 1, 0, 0);
    LocalDateTime end = LocalDateTime.of(date.atEndOfMonth(), LocalTime.of(23, 59, 59));

    List<RequestDTO> requests = requestService.getList(start, end);

    return "request/requestList";
}