Должен ли я использовать классы даты и времени Java или использовать стороннюю библиотеку, такую ​​как Joda Time?

Я создаю веб-систему, которая будет использоваться в странах со всего мира. Одним из типов данных, которые должны быть сохранены, являются даты и время.

Каковы плюсы и минусы использования классов даты и времени Java по сравнению со сторонними библиотеками, такими как время Joda? Я думаю, что эти сторонние библиотеки существуют по уважительной причине, но я никогда не сравнивал их сам.

5 ответов

Решение

РЕДАКТИРОВАТЬ: Теперь, когда Java 8 была выпущена, если вы можете использовать это, сделайте это! java.time даже чище, чем Joda Time, на мой взгляд. Однако, если вы застряли до Java-8, читайте дальше...

Макс спросил о плюсах и минусах использования Joda...

Плюсы:

  • Это работает, очень хорошо. Я сильно подозреваю, что в Joda гораздо меньше ошибок, чем в стандартных библиотеках Java. Некоторые ошибки в библиотеках Java действительно трудно (если не невозможно) исправить из-за дизайна.
  • Он предназначен для того, чтобы побудить вас думать об обработке даты / времени правильным образом - разделяя понятие "местное время" (например, "разбуди меня в 7 утра, где бы я ни был") и мгновение во времени ("я звоню Джеймсу"). в 3 часа дня по тихоокеанскому времени; возможно, это не 3 часа дня, где он, но это то же самое мгновение ")
  • Я считаю, что это облегчает обновление базы данных часовых поясов, которая меняется довольно часто
  • У этого есть хорошая история неизменности, которая делает жизнь намного легче IME.
  • Исходя из неизменности, все форматеры являются поточно-ориентированными, что прекрасно, потому что вы почти всегда хотите повторно использовать один форматер через приложение
  • Вы будете иметь преимущество в обучении java.time в Java 8, так как они хотя бы несколько похожи

Минусы:

  • Это еще один API для изучения (хотя документы довольно хороши)
  • Это еще одна библиотека для сборки и развертывания
  • Когда вы используете Java 8, все еще есть некоторая работа, чтобы перенести ваши навыки
  • Я не смог использовать DateTimeZoneBuilder эффективно в прошлом. Это очень редкий случай использования.

Чтобы ответить на идею oxbow_lakes по эффективному созданию собственного небольшого API, вот мое мнение о том, почему это плохая идея:

  • Это работает. Зачем работать, когда это уже сделано для тебя?
  • Новичок в вашей команде гораздо чаще знаком с Joda, чем с вашим доморощенным API
  • Скорее всего, вы ошибетесь в чем-то, кроме простейшего использования... и даже если вы изначально думаете, что вам нужна только простая функциональность, эти вещи имеют привычку усложняться, по одному крошечным за раз. Манипуляции с датой и временем трудно сделать правильно. Кроме того, встроенные Java API трудно использовать должным образом - просто посмотрите на правила работы арифметики API календаря по дате и времени. Создавать что-либо поверх них - плохая идея, а не использовать хорошо спроектированную библиотеку для начала.

Ну, если вы не собираетесь ждать Java 8, надеясь, что они реализуют лучший API для манипулирования датой и временем, да, пожалуйста, используйте Joda-Time. Это экономит время и позволяет избежать многих головных болей.

Ответ: это зависит

JODA (и JSR-310) - это полнофункциональная библиотека даты / времени, включающая поддержку для использования с несколькими календарными системами.

Лично я обнаружил, что JODA слишком далеко зашел с точки зрения сложности для того, что мне нужно. 2 основные (ИМХО) ошибки в стандарте Java Date а также Calendar классы:

  1. Они изменчивы
  2. Они смешивают концепцию год-месяц-день из мгновенного времени

Несмотря на то, что они решаются JODA, вам будет довольно легко создавать свои собственные классы для YearMonthDay а также Instant, которые оба используют классы Java под капотом для фактических "календарных" вычислений. Тогда вам не нужно знакомиться с API из>100 классов, другим механизмом форматирования / разбора и т. Д.

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

Лидером по спецификации JSR-310 является Стивен Коулборн, который написал JODA на первом месте, поэтому логически заменит JODA.

Все зависит от того, что вы делаете с датами. Если вы просто сохраняете их, то встроенные в Dates Java, вероятно, сделают все, что вам нужно. Однако, если вы делаете обширные манипуляции с датой времени, вам, вероятно, лучше с Йодой.

Вы должны использовать библиотеку Joda-Time, потому что:

  1. Joda-Time поддерживает стандарт ISO 8601, который является стандартным способом
    представление даты.
  2. Сложение и вычитание дня / месяца / года в Joda-Time проще, чем java.util.date.
  3. Инициализация по заданной дате намного проще в Joda-Time.
  4. Joda-Time также поддерживает часовой пояс.
  5. Joda-Time имеет лучший встроенный разбор. Неправильная дата типа "2014-02-31" выбрасывается как ошибка: Exception in thread "main" org.joda.time.IllegalFieldValueException: Cannot parse "2014-02-31": Value 31 for dayOfMonth must be in the range [1,28].

Вам может понравиться эта страница для более подробной информации: http://swcodes.blogspot.com/

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