2014-01-20 6 views
0

SimpleDateFormat을 사용하여 날짜를 구문 분석하는 응용 프로그램이 있습니다. 갑자기 내 컴퓨터의 표시 시간 형식을 중국어 형식으로 변경 한 다음 다른 일을하기 위해 남겨 둡니다.표시 시간을 변경할 때 SimpleDateFormat이 충돌 함

몇 분 후에 응용 프로그램을 실행하기 위해 돌아 왔을 때, 어떤 이유로 "파싱 할 수없는 날짜"오류가 발생했습니다. 이것은 전에 결코 일어나지 않았다; 나는 새로운 코드를 전혀 소개하지 않았기 때문에 무엇이 잘못되었는지 궁금해하고있었습니다.

나는 그때 내 행동을 추적하고 시간 표시 형식을 변경했기 때문에 다시 변경했으며 응용 프로그램이 평상시처럼 실행됩니다.

이제 문서를 살펴보면 라이브러리가 로케일에 민감하다는 것을 알 수 있습니다. 다행히도이 응용 프로그램은 컴퓨터 설정을 완전히 제어 할 수있는 개인용으로 만 사용됩니다. 그러나 공공 소비를 위해 응용 프로그램을 배포하는 경우 환경에 대한 제어권이 없으므로 미국 시간 형식을 사용하지 않는 클라이언트가있는 경우 불만이 있습니다.

  1. 모든 datetime 파싱 라이브러리에서이 문제가 발생합니까?
  2. 로케일 감지 기능을 투명하게 처리하는 "로캘 구분 안 함"라이브러리가 있습니까? 그렇다면 무엇을 사용해야합니까?
  3. 이 동작으로 인해 SimpleDateFormat을 완전히 피해야합니까?

답변

1

형식 구문 분석은 로캘에 따라 다릅니다. 안전을 위해 SimpleDateFormat 인스턴스를 만들 때 예상 로케일을 명시 적으로 보내야합니다. 그렇지 않으면 혼란을 줄 수있는 데프 루트 시스템 로케일이 필요합니다.

이 경우 귀하의 경우에 발생했습니다. 프로그램이 잘 작동했습니다. 그런 다음 "컴퓨터의 시간 형식"을 변경하면 로캘이 변경됩니다. 그런 다음 프로그램이 작동을 멈췄습니다.

+0

내가 문제를 잘못 생각할 수도 있습니다. 라이브러리는 사람들이 다른 날짜 시간을 가지고 있다는 사실을 올바르게 처리하지만, 특정 형식이 필요할 것으로 예상되는 경우 로캘을 지정해야합니다. 그건 의미가 있습니다. – MxyL

+0

@MxyL, 이것이 정확히 무엇을 의미합니다. 내 설명이 불명확하면 미안합니다. – AlexR

관련 문제