-@DataTimeFormat-
"@DataTimeFormat"? 우선 처음 들었을 때, Data랑,,, Time이 있으니까 시간과 관련된 느낌을 받았다.
사용자로부터 날짜 및 시간 정보를 입력 받을 때, 보통 "문자열 형태"로 받게 된다.
예를 들어, 사용자가 Web Page에서 날짜를 선택하면 "2023-03-16"과 같은 문자열 형태로 데이터가 전달된다. 이때 문자열 형태의 날짜 데이터를 처리하려면, 프로그램에서 사용하기 쉬운 형태로 변환해야만 한다.
그래서 우리 Java 에서는 날짜와 시간을 다루는 객체인 "LocalDate", "LocalDateTime" 등을 사용한다.
이제 더 자세히 알아보자구요! Common~!!!!!
★★ 문자열 형태의 날짜 데이터 -> 자바 객체로 변환하는 이유★★
①.올바른 날짜인지 확인: "문자열"-> "자바 객체"로 변환하면, 올바른 날짜 형식인지 확인할 수 있다. 잘못된 값이 들어오면 에러를 발생시켜 처리할 수 있다.
②. 날짜 관련 기능 활용: 자바 객체로 변환하면, 자바에서 제공하는 날짜 관련 기능을 쉽게 활용할 수 있다.
③. 날짜 계산 용이: 객체로 변환하면, 날짜 간의 차이 계산이나 특정 기간을 더하거나 빼는 등의 작업을 쉽게 할 수 있다.
아래는 LocalDate를 이용해서 현재 날짜를 가져오거나, 두 날짜 사이의 차이를 계산, 혹은 결과를 문자열 형태로 반환하는 등의 여러 가지 기능들을 활용할 수 있는 예제 코드다.
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.Period;
@RestController
public class DateController {
//Client가 "/calculate-age"로 GET 요청을 보내면 실행되는 코드. request에 "birthDate"라는 parameter를 포함해야 한다. 이 파라미터는 "yyyy-MM-dd" 형식의 날짜여야 한다.
@GetMapping("/calculate-age")
public String calculateAge(@RequestParam("birthDate") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate birthDate) {
// 현재 날짜를 가져오는 기능 사용 가능. (.now)
LocalDate currentDate = LocalDate.now();
// 두 날짜 사이의 차이를 계산 가능.
Period period = Period.between(birthDate, currentDate);
// 결과를 문자열 형태로 반환 가능.
return "Your age is: " + period.getYears() + " years, " + period.getMonths() + " months, and " + period.getDays() + " days.";
}
}
클라이언트로부터 전달받은 "birthDate" 파라미터 값을 LocalDate 객체로 변환하고 나서.
현재 날짜를 가져오고 나서. birthDate와 현재 날짜 사이의 기간(Period)을 계산 한다.
결과를 문자열 형태로 반환하여 사용자의 나이를 년, 월, 일 단위로 return해준다.
예를 들어, 클라이언트가 "/calculate-age?birthDate=2000-01-01"로 GET 요청을 보낼 경우, 이 코드는 사용자의 나이를 계산하여 "Your age is: X years, Y months, and Z days." 형식으로 반환 해주고 있다.
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
@RestController
public class DateController {
@GetMapping("/days-between-dates")
public String daysBetweenDates(@RequestParam("date1") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date1,
@RequestParam("date2") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date2) {
// 두 날짜 사이의 일 수를 계산.
long daysBetween = ChronoUnit.DAYS.between(date1, date2);
// 결과를 문자열 형태로 반환.
return "Days between " + date1 + " and " + date2 + ": " + daysBetween;
}
}
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
@RestController
public class DateTimeController {
@GetMapping("/one-week-later")
public String oneWeekLater(@RequestParam("dateTime") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") LocalDateTime dateTime) {
// 입력받은 날짜와 시간으로부터 1주일 후의 날짜와 시간을 계산.
LocalDateTime oneWeekLater = dateTime.plus(1, ChronoUnit.WEEKS);
// 결과를 문자열 형태로 반환.
return "One week later from " + dateTime + " is: " + oneWeekLater;
}
}
'스프링부트' 카테고리의 다른 글
@Controller에서의 다양한 return 타입들 (0) | 2023.04.11 |
---|---|
Model이라는 데이터 전달자에 대해서 알아보기! 😊 (0) | 2023.04.11 |
@RequiredArgsConstructor 상세 설명 (0) | 2023.04.06 |
스프링MVC 기본구조 (0) | 2023.04.06 |
MemoryMemberRepository class (0) | 2023.04.06 |