ICU4j SimpleDateFormatter, возвращающий странные результаты

Наш проект нуждается в квартальной поддержке, и, к сожалению, мы находимся на Java 1.7 и застряли на нем по несчастным причинам.

Мы добавили библиотеку ICU4j для использования SimpleDateFormat, предоставляемого внутри.

К сожалению, это очень странный разбор дат (см. Ниже). Любая помощь будет оценена.

  val formatter  = new java.text.SimpleDateFormat("yyyy")
  val formatter2 = new com.ibm.icu.text.SimpleDateFormat("yyyy")
  Array(formatter2.parse("1234"), formatter.parse("1234"))

Результат

0 = {Date@10561} "Sun Jan 01 00:00:00 PST 1234"
1 = {Date@10563} "Sun Jan 01 00:12:28 PST 1234"

Я много читал документы, но не уверен, почему он разбирается со смещением. Я уверен, что это часть API и надеюсь, что кто-то может объяснить мои трудности. Любая помощь будет оценена.

http://www.icu-project.org/apiref/icu4j/com/ibm/icu/text/SimpleDateFormat.html

1 ответ

Решение

О проблеме часового пояса:

Вероятно, данные / правила часового пояса ICU4J и вашей Java-7-JVM различаются для 1234 года. Обычно вы должны использовать годы после 1900 года, верно? Если это так, то вероятность получить те же правила гораздо выше. Если нет, то вам следует позаботиться о выборе правильных версий, чтобы убедиться, что у вас одинаковые правила. Может быть, вам также нужно применить tzupdater-инструмент Oracle.

Обновление о зонах:

Благодаря хорошему исследованию OP, мы можем установить системное свойство, специфичное для ICU4J: com.ibm.icu.util.TimeZone.DefaultTimeZoneType = JDK

В любом случае, если единственной причиной использования ICU4J является поддержка в течение четверти года, то альтернативой также может быть

или

используя мою библиотеку Time4J ( v3.x -line runnable на Java-6+7). Он также предлагает поддержку четверти за счет меньшего размера и лучшего API (ближе к тому, что java.time в Java-8), включая хорошую интернационализацию, основанную на тех же данных CLDR, что и ICU4J, см. также шаблон документа

или же

использование Threeten-Backport (с недостатком не иметь никакой интернационализации -> отсутствие локализованных данных).

Другие вопросы по тегам