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

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

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

Ответ 1

EDIT: теперь, когда Java 8 был выпущен, если вы можете использовать это, сделайте это! На мой взгляд, java.time даже чище, чем Joda Time. Однако, если вы застряли в пред-Java-8, прочитайте...

Макс попросил за и против использования Джоды...

Плюсы:

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

Минусы:

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

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

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

Ответ 2

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

Ответ 3

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

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

Лично я обнаружил, что JODA является слишком большим шагом в плане сложности для того, что мне нужно. Ошибки 2 главных (IMHO) в стандартных классах java Date и Calendar:

  • Они изменяются.
  • Они смешивают концепцию Year-Month-Day с мгновенным временем

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

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

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

Ответ 4

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

Ответ 5

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

  • Joda-Time поддерживает стандарт ISO 8601, который является стандартным способом представления даты.
  • Добавление и вычитание дня/месяца/года проще в Joda-Time, чем java.util.date.
  • Инициализация датой даты намного проще в Joda-Time.
  • Joda-Time также поддерживает часовой пояс.
  • 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/