[입 개발] java.time.LocalDateTime 에서 해당 날짜의 최소값과, 최대값 구하기

그냥 아주 간단한 내용입니다. 해당 날짜의 시작시간과 끝 시간을 만들고 싶을때가 있는데. LocalDate 를 쓰면 asStartOfDay 라는 메서드를 통해서 쉽게 시작 시간을 구할 수 있습니다.

import java.time.LocalDate;
import java.time.LocalDateTime;

public class Main {
  public static void main(String[] args) {
    LocalDate a = LocalDate.of(2014, 6, 30);
    
    LocalDateTime l = a.atStartOfDay();
    System.out.println(l); 
  }
}

그런데 끝 시간을 구하는 건 애매하고, 또한 LocalDateTime 이 아니라 LocalDate 에서 구하는 거라 귀찮습니다.(그러나 이 블로깅을 하면서… 아주 많은 방법이 있다는 것을 알고 여기서… 접어야…)

LocalDate.now().atTime(23, 59, 59);     //23:59:59
LocalDate.now().atTime(LocalTime.MAX);  //23:59:59.999999999
LocalDate.now().atTime(LocalTime.MIDNIGHT); //00:00:00.000000000
LocalDate.now().atTime(LocalTime.MIN);      //00:00:00.000000000
LocalDate.now().atTime(LocalTime.NOON);     //12:00:00.000000000
LocalDate.now().atTime(LocalTime.MAX);      //23:59:59.999999999

위와 같은 방법들과 함께 LocaDateTime 에서 바로 구할때는 with 를 사용하면 가볍게 구할 수 있습니다.(이게 말하려고 하던건데…)

        val start = LocalDateTime.now().with(LocalTime.MIN)
        val end = LocalDateTime.now().plusSeconds(-1)

그런데 왜 저는 저기서 1초를 빼줬을까요? LocalTime.MAX는 위에서 보여주듯이 23:59:59.999999999 가 되면서 Mysql 등의 DateTime 에 들어가면 다음날이 되버립니다. 실제로는 다음날의 00:00:00 이 되어버리는 거죠.

가벼운 팁 여기서 끝…