반응형
환경: 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 짱...
비슷한 풀이
728x90
반응형
'개발 > java' 카테고리의 다른 글
[java] lambda stream and final (0) | 2023.02.06 |
---|---|
[google admob] ssv 콜백 적용 (0) | 2023.01.06 |
[mac] oracle jdk -> open jdk java교체하기 (0) | 2022.08.22 |
[java] for loops and performance (0) | 2022.08.04 |
[jmh] benchmark test (0) | 2022.08.04 |