반응형
문제
LocalDateTime.parse(
"2022년 09월 11일 오전 11시 20분",
DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 a hh시 mm분")
)
"2022년 09월 11일 오전 11시 20분" 문자열이 "yyyy년 MM월 dd일 a hh시 mm분" 형식인지 테스트를 하려고 위와 같이 LocalDateTime.parse를 이용했다.
나는 테스트가 잘 성공해서 서버에 올렸는데 배포 중에 위 테스트가 실패했다고 배포가 실패됐다.
java.time.format.DateTimeParseException: Text '2022년 09월 11일 오전 11시 20분' could not be parsed at index 14
로그보니까 이런 에러가 발생해서 테스트가 실패했었던 것이다.
원인
계속 헤매다가 결국 답을 찾았는데
답은 내 Locale.getDefault() 값이 ko_KR로 되어 있어서였다.
엥 난 ko_KR로 설정한 적이 없는데?
이상해서 찾아보니 별다른 설정을 하지 않은경우 os 언어 설정 값을 읽어와 셋팅한다고 한다. (이런..)
나는 한국어(ko_KR)로 해놨고 서버는 영어(en_US)로 기본 설정되어 있어서 테스트 결과가 달랐던 것이다.
해결책
1. Locale.getDefault() 을 en_US로 변경하기
먼저 서버랑 Locale을 맞춰주자.
2가지 방법이 있다.
1) os의 기본 언어 설정을 영어로 설정한다.
2) jvm 옵션에 언어 정보를 넣어준다.
-Duser.language=en -Duser.region=US
2. DateFormatter.ofPattern의 2번째 인자에 Locale 정보 넣어주기
LocalDateTime.parse(
"2022년 09월 11일 오전 11시 20분",
DateTimeFormatter.ofPattern("yyyy년 MM월 dd일 a hh시 mm분", Locale.KOREA)
)
개발 환경 설정할 때 Locale 값을 셋팅하고 시작하는 게 좋아보인다.
생각지도 못한 일이 발생한다.
반응형
댓글