Хотя Joda является многофункциональным и более сложным, чем стандартное время Java, это не всегда может быть лучшим вариантом для использования. Как я могу решить, следует ли мне использовать Joda Time или Java Time в любом коде Java?
Есть ли какое-то руководство, которое подсказывает нам, как выбрать правильное в зависимости от наших требований?
Ответы:
Joda Time - это такое улучшение по сравнению с библиотекой времени Java, что она почти всегда является правильным выбором, за исключением следующих исключений:
Когда трудно или нежелательно добавлять сторонние зависимости в ваш проект
Когда его использование в общедоступном интерфейсе может вызвать проблемы, например, получение ORM для обработки полей времени java и Joda.
Тем не менее, в случае 2) было бы лучше использовать Joda для внутреннего использования, если это возможно.
Вышеуказанные вещи стоит иметь в виду, но они должны быть редкими. Если сомневаешься, иди с Йодой.
источник
Обратите внимание, что на сайте Joda-Time говорится:
Основной участник Joda-Time , jodastephen , также является основным разработчиком JSR-310, что можно увидеть в репозитории GitHub, связанном с http://www.threeten.org/ . Кстати, у jodastephen есть также ТАК ручка ...
Я думаю, можно с уверенностью утверждать, что мы можем чувствовать себя комфортно и безопасно с новым API даты и времени, который предоставляется в Java 8 и более поздних версиях.
Некоторые дополнительные ссылки:
java.time.*
JavadocDate
Javadocисточник
Стандартный API даты Java настолько принципиально сломан, что я часто рассматривал простое добавление Joda Time к расширениям библиотеки JVM, чтобы он загружался в путь к классам по умолчанию вместе с остальной частью Java API.
Если вам когда-либо было поручено преобразовать интернационализацию и часовые пояса в унаследованное Java-приложение и вы пытались использовать только стандартный Java API, вы поймете, что я имею в виду. Мне удалось превратить тысячи строк кода в менее сотни. Повышение производительности немыслимо.
Кроме того, стандартное API даты не является интуитивно понятным, поскольку жидкое API Joda можно получить за часы, а не за недели. Ваша аналогия с попыткой добраться до острова, который находится в двух милях, более похожа на следующее.
Или...
Как уже отмечалось в других ответах, некоторые недостатки, такие как ORM, даже становятся несуществующими, поскольку в Hibernate теперь есть плагины, которые позволяют сопоставлять свойства bean-компонентов типа Joda с полями даты / времени базы данных. JPA также может иметь ответ на этот вопрос.
Если вы хотите, чтобы ваше приложение было минималистичным, как настольное приложение, поскольку оно касается дискового пространства, то, возможно, Java даже не является правильным выбором языка.
источник
Еще один момент: Java-Time (т.е.
Date
) не является ThreadSafe, а JodaTime. Поэтому JodaTime предпочтительнее, когда такие требования, какИли для простых приложений Java-Time это нормально.
источник
java.time
реализуется через неизменяемость. См. Stackoverflow.com/questions/9303532/… . Это хорошо работает как для простых, так и для сложных приложений. Даже api doc утверждает, что «Все классы являются неизменяемыми и поточно-ориентированными» (буквально цитируется во втором абзаце). У старыхjava.util
классов, с другой стороны, есть несколько проблем. Я понимаю, что этот ответ относится к последнему, но важно сделать это различие сейчас.Java.time структура заменяет как устаревшие классы даты и времени и Joda-Time
Обновление: старые классы даты и времени, поставляемые с самыми ранними версиями Java, теперь унаследованы, официально заменены классами java.time, встроенными в Java 8, Java 9 и более поздние версии .
Date
,Calendar
,SimpleDateFormat
, Иjava.sql.*
классы даты и времени все должны избегать. Нет необходимости использовать эти запутанные, хлопотные, плохо разработанные классы. Они полностью заменены классами java.time. Теперь их единственная цель - поддерживать существующий старый код. При взаимодействии со старым кодом вы можете конвертировать в / из java.time, вызывая новые методы, добавленные к старым классам. Для получения дополнительной информации о преобразовании см .: Преобразование java.util.Date в тип «java.time»? ,Проект Joda-Time , находящийся сейчас в режиме обслуживания , рекомендует перейти на классы java.time . Проект Joda-Time вдохновил фреймворк java.time. Оба возглавляются одним и тем же человеком, Стивеном Коулборном . Вы можете думать о java.time как о переписывании / редизайне Joda-Time, всего нового кода, но с использованием того, что было изучено за годы создания первой в отрасли комплексной и сложной библиотеки дат и времени.
Чтобы узнать больше, смотрите Oracle Tutorial . И поиск переполнения стека для многих примеров и объяснений.
Большая часть функциональности java.time перенесена на Java 6 и 7 в ThreeTen-Backport и дополнительно адаптирована для Android в ThreeTenABP (см. Как использовать… ).
Проект ThreeTen-Extra расширяет java.time дополнительными классами. Этот проект является полигоном для возможных будущих дополнений к java.time. Вы можете найти некоторые полезные классы здесь , такие как
Interval
,YearWeek
,YearQuarter
, и более .источник