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

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

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

146
задан 04.04.2020, 12:50

4 ответа

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

Max попросил за и против использования Joda...

Профессионалы:

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

Недостатки:

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

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

  • Это - работа. Почему действительно работают, когда это было уже сделано для Вас?
  • вновь прибывший А Вашей команде, намного более вероятно, будет знаком с Joda, чем с Вашим API
  • собственной разработки, Вы, вероятно, поймете его превратно для чего-либо вне самого простого использования... и даже если Вы первоначально думаете , Вам только нужна простая функциональность, эти вещи имеют привычку к становлению более сложным, одним крошечным битом за один раз. Управление датой и временем трудно , чтобы сделать правильно. Кроме того, встроенные API Java тверды к , использование правильно - просто смотрит на правила для того, как календарная арифметика даты/времени API работает. Создание чего-либо сверху их является плохой идеей вместо того, чтобы пользоваться хорошо разработанной библиотекой для запуска с.
197
ответ дан 04.04.2020, 12:52
  • 1
    @adi: Обновленный - it' s все еще допустимый, но , надо надеяться JSR-310 будет частью Java 8, но этого wasn' t часть Java 7. – Jon Skeet 04.04.2020, 12:52
  • 2
    @JonSkeet Это должно, вероятно, быть обновлено начиная с введения java-8 – Sionnach733 04.04.2020, 12:53
  • 3
    @Sionnach733: I' m не собирающийся обновлять все это, но I' ll добавляют что-то в запуске. – Jon Skeet 04.04.2020, 12:53

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

24
ответ дан 04.04.2020, 12:51
  • 1
    JSR-310 не может сделать Java 7 – oxbow_lakes 04.04.2020, 12:51
  • 2
    За и против? I' ve никогда не использовал время Joda - будет интересно услышать что люди как приблизительно это. – Max Stewart 04.04.2020, 12:52
  • 3
    JSR-310 не сделал , делают Java 7. Исправьте для Java' s 09.08.10 как соответствующий... – Brian Agnew 04.04.2020, 12:52

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

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

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

  1. Они изменяемы
  2. , Они перепутывают понятие Дня месяца года с Момента вовремя

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

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

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

15
ответ дан 04.04.2020, 12:51
  • 1
    I' m не идиот также, но I' ve все еще имел проблемы с Java D& T API. They' ре, крайне легкое неправильно использовать. Причина, почему люди, более вероятно, будут в состоянии использовать Joda правильно, состоит в том, что Joda лучше разработан - это поощряет Вы делать правильную вещь. – Jon Skeet 04.04.2020, 12:52
  • 2
    Я доверяю эксперту по мне любой день недели когда дело доходит до API даты/времени. It' s не как это некоторый случайный сторонний API ни с кем еще использование его. " > 100 classes" аргументом является соломенный человек, потому что Вы, очевидно, don' t должен изучить их всех. – Jon Skeet 04.04.2020, 12:52
  • 3
    Я предполагаю we' ll должны согласиться отличаться. Любая trustworth дата/время, записанная экспертами и хорошо разработанный, который избегает меня имеющий необходимость сделать грязную работу со временем arithment, количества как " должен have" с моей точки зрения. За прошлый год I' ve учился ненавидеть человеческое измерение времени со страстью. – Jon Skeet 04.04.2020, 12:53
  • 4
    Прокрутка Вашего собственного, когда Joda существует, является просто ужасной идеей. Просто don' t делают это. It' s верный, что Joda имеет десятки классов это you' ре, не собирающееся использовать, но ответ на это, вполне просто - don' t используют тех Вы don' t потребность. Существует столько вещей, которые могут пойти не так, как надо с записью Вашей собственной библиотеки этого типа - усилие you' ре, оказывающееся перед необходимостью вставленный, огромно, и в разработке и в тестировании. Или, можно просто добавить одну библиотеку. Затем Joda обладает дополнительным преимуществом, что новички Вашей команде, возможно, использовали его прежде, но они won' t пользовались Вашей библиотекой собственной разработки. – Dawood ibn Kareem 04.04.2020, 12:53
  • 5
    если не перестроены неспециалистами, IMO. – Jon Skeet 04.04.2020, 12:53

Все это зависит от того, что Вы делаете с датами. При простом сохранении их их, Java создал на Датах, вероятно, сделает все, к чему Вы хотите их. Однако при выполнении обширного управления датой времени Вы, вероятно, более обеспечены с Joda.

7
ответ дан 04.04.2020, 12:52

Теги

Похожие вопросы