2014-01-20 2 views
0

У меня есть приложение, которое использует SimpleDateFormat для анализа дат. У меня внезапно появилось желание изменить формат отображения времени моего компьютера в китайском формате, а затем оставил его на этом, чтобы сделать что-то еще.Ошибка SimpleDateFormat при изменении времени отображения

Когда я вернулся, чтобы запустить мое приложение несколько минут спустя, по какой-то причине я получал ошибки «Несовершенная дата». Это никогда не случалось раньше; Я никогда не вводил никакого нового кода, поэтому мне было интересно, что пошло не так.

Затем я отслеживал свои действия и помнил, что я изменил формат отображения времени, поэтому я изменил его, и приложение работает как обычно.

Теперь, глядя в документы, я вижу, что библиотека чувствительна к локали. К счастью, это приложение предназначено только для личного использования, когда я полностью контролирую настройки своего компьютера. Однако, если бы я должен был развернуть приложение для общественного потребления, я не контролирую их среду, и поэтому, если бы у меня когда-либо был клиент, который не использовал формат времени США, они были бы недовольны.

  1. Это проблема во всех библиотеках разбора времени и времени?
  2. Существуют ли «нечувствительные к языку» библиотеки, которые будут прозрачно обрабатывать локальное обнаружение? Если да, то что я должен использовать?
  3. Должен ли я избегать SimpleDateFormat полностью из-за этого поведения?

ответ

1

Проблема в том, что разбор формата зависит от локали. Чтобы быть в безопасности, вы должны явно отправлять ожидаемый язык при создании экземпляра SimpleDateFormat. В противном случае это может привести к ошибкам в вашей системе.

Это произошло в вашем случае. Ваша программа работала хорошо. Затем вы изменили «формат времени вашего компьютера», который изменил ваш язык. Тогда ваша программа перестала работать.

+0

Возможно, я думаю о проблеме неправильным образом. Библиотека правильно обрабатывает тот факт, что люди имеют разные даты, но если я ожидаю определенного формата, мне нужно указать локаль. В этом есть смысл. – MxyL

+0

@MxyL, это именно то, что я имею в виду. Прошу прощения, если мои объяснения недостаточно ясны. – AlexR