Есть ли недостатки в использовании Joda-Time?

Я хочу убедить менеджера архитектуры включить Joda-Time в наш продукт.

Знаете ли вы какие-либо недостатки в его использовании?

Я думаю, что Joda-Time нужно постоянно обновлять из-за файлов, которые он включает. И это недостаток. Возможно, я ошибаюсь.

Не могли бы вы дать некоторую ясность по этому вопросу?

Ответ 1

У меня был почти полностью положительный опыт с Joda Time. Моя проблема заключалась в том, чтобы попытаться построить мой собственный часовой пояс (по законным причинам, уверяю вас). У меня есть некоторые очень странные исключения, и документация была не очень хороша для этого конкретного случая использования.

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

Да, есть файлы для обновления - но, по крайней мере, вы можете поддерживать их в актуальном состоянии. Не похоже, что они содержат вещи, которые не нужны для встроенного Java-материала, просто с помощью механизма Java вы просто не могли бы поддерживать информацию, подобную часовым поясам, без существенных хакеров!

В принципе, +1 для использования Joda Time. API дат/времени Java является одним из наихудших бит платформы Java, IMO.

Ответ 2

На мой взгляд, самым важным недостатком Joda-Time является точность: многие базы данных хранят временные метки с microsecond (или даже nanosecond). Joda-time идет только на миллисекунды. Это неприемлемо для меня: все классы "модели данных", которые я использую, должны отражать полную точность данных в моей базе данных. Аппроксимации или усечения моих данных библиотекой просто не режут.

Вот причина выбора миллисекундной точности, взятой из списка рассылки JSR 310:

"Joda-Time решила использовать миллисекунды, так как упростила конверсии в Date и Calendar". - С. Колеборн

Легче для кого? Автор библиотеки, можно предположить... Неправильное дизайнерское решение, на мой взгляд, когда почти все базы данных хранят время до микросекундной/наносекундной точности. Пренебрежение значениями базы данных вызывает беспокойство.

Ответ 3

Самая большая проблема, с которой мы столкнулись при использовании Joda Time, заключалась в интеграции с Spring и Tapestry, поскольку они оба хотели использовать встроенную дату и время. Мы постоянно писали обертку в геттерах/сеттерах для даты и времени: либо мы будем хранить его как Joda Time, и один набор геттеров/сеттеров передал его, а другой конвертировал бы "на лету", а некоторые классы сохранили его внутри себя как Java Дата/время, а получатель/сеттер Джоды должен был переключать его на лету.

В принципе, это была головная боль, потому что классы аналогично названы, и если вы не сможете получить всю свою архитектуру (включая другие библиотеки, которые вы интегрируете), чтобы переключиться на Joda Time, вы собираетесь написать больше кода обертки, чем вы которые могут быть сохранены с помощью библиотек Joda.

Ответ 4

Parleys размещает презентацию Стивена Коулборна о JSR-310, г-н Коулборн, автор Joda-Time и JSR-310. Он начинает с объяснения слабых сторон стандартной поддержки даты и времени на Java и почему вы хотите использовать альтернативу. Может быть полезно показать эту презентацию менеджеру вашей архитектуры. Я не могу показаться глубоко связанным

Причина, по которой Joda-Time довольно часто обновляет свой файл часового пояса, заключается в том, что данные часового пояса изменяются все время, часто в короткие сроки (сегодня на slashdot: прыжок второй добавлено в 2008-12-31 гг.) и не всегда с научной точки зрения (например, я вспоминаю, что какое-то тихоокеанское островное государство изменило свой часовой пояс, чтобы стать первой страной, вступающей в 2000 году).

Ответ 5

В прошлом я столкнулся с компаниями, которые не хотели включать стороннее программное обеспечение с открытым исходным кодом, или, по крайней мере, требовали, чтобы адвокат компании подтвердил, что лицензия не будет подвергать их какой-либо ответственности или оказывают вирусное действие на их продукт.

Как и в случае с любыми сторонними библиотеками, вы должны, вероятно, поместить его в исходный элемент управления, чтобы вы могли найти версию, которую вы отправили с конкретными версиями вашего кода, в случае, если что-то пойдет не так.

Ответ 6

Выбор миллисекунд для основного континуума времени хорош для реализации календарей древности и специальных календарей. В отличие от многих счетчиков, 64-разрядный миллисекундный счетчик имеет хороший диапазон охвата для календарей древности с свойствами опрокидывания, превышающим +/- 260 миллионов лет.

Он не обрабатывает секунды прыжка. Это хорошая вещь. Плавный переход предлагается для людей с атомными часами, чтобы позволить системам, которые не разворачивают прыжки секунд, чтобы постепенно регулировать свои часы в течение 100 секунд, чтобы выполнить коррекцию второго прыжка.

Поддержание таблиц часовых поясов также будет проблемой.

Основной континуум также позволяет использовать старый французский календарь и часы, разделяющие день на 10 интервалов, называемых метрическим временем, а не 24 часа. Классический китайский календарь делит день на 100 приращений, каждый длиной чуть более 14 минут. Все эти календари могут быть реализованы и скоординированы на базовом миллисекундном континууме.

Ответ 7

Основная проблема с этим заключается в том, что блокиратор поставщика по крайней мере до тех пор, пока он не станет частью стандарта.

По большей части я бы использовал longs для хранения любой информации о деловой дате в базе данных. Это дает мне гибкость при настройке точности, как я считаю нужным. В большинстве случаев я просто конвертирую их в java.util.Date.

Временные зоны Я бы рассматривал проблему уровня презентации, чем проблема с данными. Это упрощает базу данных и повышает переносимость, поскольку базы данных могут представлять временные параметры в разных моделях.

Стандартный класс Calendar предоставляет мне некоторые функции обработки даты, которые я конвертирую в миллисекунду с момента получения данных эпохи.

Что касается наносекундной точности, я бы сохранил это как смещение от 0 как отдельный длинный столбец.