개발/java

[Date] java8 이하에서 날짜 timezone 변환

방푸린 2022. 11. 4. 14:44
반응형

환경: Java6, springframework

api에서 아래와 같이 내려오는데

"startDateTime": "2022-10-05 00:00:00",
"endDateTime": "2022-10-31 23:59:59",

 

java.util.Date로 받는 경우

private Date startDateTime;
private Date endDateTime;

아래와 같이 그대로 안 받아지고 timezone이 변환되어 당황스러웠던 적이 있다.

startDateTime=Wed Nov 02 00:00:00 KST 2022, endDateTime=Wed Nov 30 23:59:59 KST 2022,

 

아니, 나는 온 그대로 받아서 그대로 화면에 뿌리고 싶은 건데, 대신 날짜 비교가 필요해서 string 말고 Date로 받아야 하는 건데.. 날짜가 지맘대로 바뀌어서 매우 곤란했다.

timeZone 이슈인걸 알아도 보통 java8+에 있는 LocalDateTime이나 ZonedDateTime 등을 사용했던지라 레거시 코드(java6)에서는 되지 않아 당황했는데...

방법은 생각보다 단순하였다. 물론 이를 알기 위한 삽질을 한 시간 동안 하긴 했다 ㅠㅠ

내가 있는 타임존을 아래처럼 알려주니, 그대로 받아졌다..?ㅋㅋㅋ

<정답>

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+9")
private Date startDateTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+9")
private Date endDateTime;

 

<오답>

@JsonFormat timezone 부분에 내가 변환하고자 하는 것, 즉 여기서는 kst(+9)로 오니까 utc/gmt로 받고 싶어서 아래와 같이 시도하였으나 동일했다.

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date startDateTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "UTC")
private Date endDateTime;
//////////
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT")
private Date startDateTime;
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT")
private Date endDateTime;

 

결론.. 쉬운 길도 돌아가지 않게 해주는 ㅋㅋ jsonformat 짱...


비슷한 풀이

https://stackoverflow.com/questions/31822877/jackson-jsonformat-set-date-with-one-day-less/45456037#45456037

728x90
반응형