[Java] DateTimeFormat 과 JsonFormat 정리

GET/POST API request 시 Date 변수 송수신 방법

API로 데이터를 송수신할 때, request/response DTO에서 Date 타입 변수를 사용할 경우가 종종 있다.

직렬화를 하지 않고 String으로 받은 후에 SimpleDateFormat 으로 서비스 레이어에서 변환하는 경우가 많다. Spring에서는 @DateTimeFormat 과 @JsonFormat으로 String 객체를 자동으로 Date 형으로 parsing 할 수 있다.

주의해야 할 점은, 우리나라 시간은 UTC보다 09:00 빠르므로 해당 timezone을 지정해줘야 Date 타입으로 제대로 parsing이 된다!

@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+9")
Date regDts;

날짜와 시간 format

// 로컬 시간을 의미하는 ISO 8601 문자열
2017-11-06T15:00:00.000

// UTC(GMT) 시간을 의미하는 ISO 8601 문자열
2017-11-06T06:00:00.000Z

// 로컬 시간을 의미하면서 UTC(GMT) 대비 +09:00 임을 의미하는 ISO 8601 문자열
2017-11-06T15:00:00.000+09:00
  • 2017-11-06T15:00:00.000은 ISO 8601의 기본 형식이다. 해당 시간이 로컬 시간 임을 의미한다.
  • 2017-11-06T06:00:00.000Z와 같이 뒤에 Z 식별자를 추가하면 해당 시간이 UTC(GMT) 시간 임을 의미한다.
  • 2017-11-06T15:00:00.000+09:00와 같이 뒤에 Z 대신 +HH:mm 식별자를 추가하면 해당 시간이 로컬 시간이면서 UTC(GMT)와 09:00 만큼 차이가 남을 의미한다.

우리나라의 경우 UTC보다 9시간 빠른 시간이므로 Date 타입을 확인할 경우 +09:00가 붙는 것을 확인할 수 있다.

2016-08-17T14:10:20.000+0900

참고문헌

https://jojoldu.tistory.com/361

댓글남기기