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

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

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

Ответов (5)

Решение

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

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

Плюсы:

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

Минусы:

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

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

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

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

Вам следует использовать библиотеку 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/

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

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

Лично я считаю, что JODA - это слишком сложный шаг для того, что мне нужно. Две основные (ИМХО) ошибки в стандартных java Date и Calendar классах:

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

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

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

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

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