2.5 Какие потребности сообщества Java будут удовлетворены предлагаемой спецификацией?
В настоящее время Java SE имеет два отдельных API даты и времени - java.util.Date и java.util.Calendar. Оба API постоянно описываются Java-разработчиками как сложные в использовании в блогах и на форумах. Примечательно, что оба месяца месяцами используют нулевой индекс, что является причиной многих ошибок. Календарь также страдал от множества ошибок и проблем с производительностью на протяжении многих лет, в первую очередь из-за внутреннего хранения своего состояния двумя разными способами.
Одна классическая ошибка (4639407) препятствовала созданию определенных дат в объекте Calendar. Можно написать последовательность кода, которая могла бы создать дату в одни годы, но не в другие, что помешало бы некоторым пользователям вводить правильные даты рождения. Это было вызвано тем, что класс Calendar позволял переходить на летнее время только на один час летом, тогда как исторически это было плюс 2 часа во время Второй мировой войны. Хотя эта ошибка сейчас исправлена, если в какой-то момент в будущем страна решит ввести увеличение летнего времени плюс три часа летом, тогда класс Calendar снова будет сломан.
Текущий API Java SE также страдает в многопоточных средах. Неизменяемые классы по своей сути являются потокобезопасными, поскольку их состояние не может измениться. Однако и Date, и Calendar являются изменяемыми, что требует от программистов явного рассмотрения клонирования и потоковой передачи. Кроме того, недостаточная безопасность потоков в DateTimeFormat широко не известна и является причиной многих трудных для отслеживания проблем с потоками.
Помимо проблем с классами, которые Java SE имеет для datetime, в нем нет классов для моделирования других концепций. Даты или время, не относящиеся к часовому поясу, длительности, периоды и интервалы не имеют представления класса в Java SE. В результате разработчики часто используют int для обозначения продолжительности времени, а javadoc указывает единицу.
Отсутствие исчерпывающей модели даты и времени также приводит к тому, что многие общие операции становятся сложнее, чем они должны быть. Например, вычисление количества дней между двумя датами в настоящее время является особенно сложной задачей.
Этот JSR решит проблему полной модели даты и времени, включая даты и время (с часовыми поясами и без них), длительность и периоды времени, интервалы, форматирование и синтаксический анализ.