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

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

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

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

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

Плюсы:

  • Он работает, очень хорошо. Я сильно подозреваю, что в Joda гораздо меньше ошибок, чем стандартные Java-библиотеки. Некоторые из ошибок в библиотеках Java действительно трудно (если не невозможно) исправить из-за дизайна.
  • Он призван побудить вас думать о правильности времени и времени – отделить понятие «местное время» (например, «разбудить меня в 7 утра, где бы я ни был») и мгновенное время («Я звоню Джеймсу в 15:00 по тихоокеанскому времени, может быть, не будет 3 часа вечера, где он есть, но это тот же самый момент »)
  • Я считаю, что это облегчает обновление базы данных часовых поясов, которая довольно часто изменяется
  • У этого есть хорошая история непреложности, которая делает жизнь намного легче IME.
  • Начиная с неизменности, все форматирующие элементы являются streamобезопасными, что отлично, потому что вы почти всегда хотите повторно использовать один форматировщик через приложение
  • У вас будет начальный java.time обучения 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 главных (IMHO) в стандартных classах java Date и Calendar :

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

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

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

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

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

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

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

  • Как хранятся даты в Oracle?
  • Как рассчитать «время назад» в Java?
  • Oracle: как добавить минуты в метку времени?
  • Формат даты в формате MySQL
  • по дате в mongodb
  • Как получить количество дней разницы между двумя датами в mysql?
  • Случайная дата в C #
  • Как найти разницу в днях между двумя датами?
  • Android / Java - разница по дате в днях
  • Swift: как создать отметку времени и формат даты как ISO 8601, RFC 3339, часовой пояс UTC?
  • Всегда ли полезно хранить время в UTC или это тот случай, когда лучше хранить в местное время?
  • Давайте будем гением компьютера.