본문 바로가기

Error

[ERROR] zone 설정 미설정 시, ZonedDateTime 형식 다름

문제 ❗


ZonedDateTime 을 만들어서 만료일자를 만들던 중, 이상한 버그가 있었다.

 

버그라고 하기에는 애매하고, 그냥 로컬에서 테스트 시에는 아래와 같은 형식으로 잘 나왔다.

"2024-00-00T00:00:00+09:00"

 

 

하지만 도커로 이미지를 말고 컨테이너 배포 하게 되면 아래의 형식으로 뜨게 되었다.!

"2024-00-00T00:00:00Z"

 

원인 🔧


 

JVM 의 설정 때문이었다.

 

로컬 PC 에서는 JVM 에서 나라의 설정이 Asia/Seoul 로 되어있으니 해당 부분이 잘 나왔지만

도커를 빌드한 순간 딱히 나라 설정한 부분이 존재하지 않기 때문에 Z UTC 타임존을 나타내는 것이었다.

 


해결 ✅


 

1. ZonedDateTime을 서울 시간대로 파싱

String expiredTimeStr = "2024-11-10T03:27:36Z"; // UTC 시간대 문자열
ZonedDateTime expiredTime = ZonedDateTime.parse(expiredTimeStr)
                                         .withZoneSameInstant(ZoneId.of("Asia/Seoul"));

System.out.println(expiredTime); // 서울 시간대로 출력

 

 

2. 배포 시 jar 설정

java -Duser.timezone=Asia/Seoul -jar your-application.jar

 

으로 해주면 해당 형식이 원하는 대로 잘 나온다.

지금은 한국 시간대로 나와야되서 중요한 부분이지만 나중에 각 국에 배포할 때는 어떻게 설정해야되는지 생각해봐야겠다.