-@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;
    }
}

 

+ Recent posts