Должен ли я использовать классы даты и времени 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/