본문 바로가기

백엔드

[Spring Boot] LocalDate를 LocalDateTime으로 변환

728x90

클라이언트에서 날짜만 입력받았을 때 LocalDateTime 자료형으로 변환하기

 

클라이언트 측에서 날짜만 입력받았을 때, 그 기간 내의 데이터를 검색해야한다.

문제는 entity 필드는 LocalDateTime으로 저장했기 때문에 LocalDate로 받은 날짜를 변환해줘야한다는 것이다. (그 기간 내의 데이터를 검색하기 위해서 자료형을 맞춰줘야한다.)

 

1. 문자열을 LocalDate로 변환하기

2. LocalDate를 LocalDateTime으로 변환하기

 

문자열에서 LocalDateTime으로 바로 변환하지 못하는 이유는 클라이언트 측에서 날짜만 전달하기 때문이다.(yyyyMMddHHmm 으로 설정하고 '20241012'만 전달하면 길이가 부족하다는 오류가 뜬다) 따라서 날짜를 전달받은 후 startDate와 endDate의 시간을 서버에서 임의로 정해줘야한다.

 

@GetMapping("/my/{id}")
public ResponseEntity<MYDTO> controller_func(@PathVariable Long id,
                                             @RequestParam("startDate") @DateTimeFormat(pattern = "yyyyMMdd") LocalDate startDate,
                                             @RequestParam("endDate") @DateTimeFormat(pattern = "yyyyMMdd") LocalDate endDate){
    return ResponseEntity.ok(myService.service_func(id, startDate.atStartOfDay(), endDate.atTime(LocalTime.MAX)));
}

 

  1. 쿼리 파라미터로 날짜를 받는다. 이때, 'yyyyMMdd' 형식의 문자열로 받는다.
  2. @DateTimeFormat 어노테이션을 사용하여 LocalDate로 변환한다.
  3. 서비스 코드의 파라미터는 LocalDateTime 자료형을 받기 때문에 atStratOfDay()와 atTime(LocalTime.MAX) 함수를 이용하여 LocalDateTime 자료형으로 바꿔준다.
    • atStartOfDay() : LocalDate 형식의 변수에 시간을 00:00으로 설정하여 LocalDateTime으로 변경한다.
    • atTime(LocalTime.MAX) : 시간을 그 날의 마지막으로 설정하여 LocalDateTime으로 변경한다.

 

이렇게 하면 클라이언트에서 날짜만 입력받아도 LocalDateTime을 사용하는 서버에서 기간 내 데이터를 검색할 수 있다.

반응형