본문 바로가기
Kotlin

[Kotlin] LocalDateTime.parse() DateTimeParseException, 한글 깨짐 해결 방법

by 노력남자 2022. 9. 11.
반응형

문제

 

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 값을 셋팅하고 시작하는 게 좋아보인다.

 

생각지도 못한 일이 발생한다.

반응형

댓글