홈 › 중급 › 08 / 9

java.time 실무 날짜 계산

정산일, 영업일, 월말, 시간대, DB 매핑
섹션 7진행 0 / 9

7. 정리

  • 시간대가 필요한가로 타입을 고른다. 날짜만 LocalDate, 국내 시각 LocalDateTime, 절대 시각·로그·만료는 Instant, 월 단위는 YearMonth.
  • 모든 타입은 불변. 연산 결과를 받아야 하고, 포매터는 static final 로 공유한다.
  • 월말은 YearMonth.atEndOfMonth() 로 다시 구한다. plusMonths 를 이어 가면 31→28→28 로 유실된다.
  • 영업일은 직접 센다. 주말 + 공휴일 테이블, 지급일은 다음 영업일·급여는 직전 영업일.
  • Period 는 년월일, Duration 은 시분초, 총량은 ChronoUnit.between. 자정을 넘길 수 있으면 날짜를 포함해 잰다.
  • yyyy 소문자, HH 대문자, 입력 검증은 STRICT + uuuu. SMART 는 2월 31일을 조용히 28일로 만든다.
  • LocalDateTime.now() 대신 Instant.now() 또는 now(ZoneId). 서버 시간대에 값이 좌우되지 않게 한다. 같은 순간 비교는 isEqual.
  • DB 는 LocalDate/LocalDateTime 으로 직접 매핑하고, 레거시 Date 는 toInstant() 로 건너온다. Clock 을 주입하면 연말·월말 경계를 테스트할 수 있다.

중급 레벨의 빈틈은 여기까지입니다. 다음은 고급 07 Java 21 모던 문법 에서 이 레슨들이 이미 쓰고 있는 record, switch 식, 텍스트 블록, sealed, 패턴 매칭을 정면으로 다룹니다.