Статьи

Интервью: игра окончена для классов даты и времени JDK

JSR 310 стремится модернизировать дату и календарь занятий. Цель состоит в том, чтобы предоставить более продвинутую и всеобъемлющую модель для даты и времени, чем те, которые есть в API даты и календаря. Лидеры JSR, Стивен Колебурн и Майкл Насименто , представляют свои работы на JavaOne и дают обзор ниже.

Во-первых, пожалуйста, кратко представьтесь.

Майкл Насименто. Я старший технический консультант Summa Technologies и основатель проекта с открытым исходным кодом Genesis . Я также являлся экспертом по нескольким JSR, таким как Общие аннотации для платформы Java (JSR-250).

Стивен Коулборн. Я работаю над созданием систем бронирования для электронной коммерции путешествий и участвую во многих проектах с открытым исходным кодом, таких как Apache Commons и JodaTime. Я участвую в этой JSR из-за моего проекта JodaTime.

JodaTime? Это что?

Стивен: JodaTime обеспечивает полную замену классов даты и времени в JDK:

public boolean isAfterPayDay(DateTime datetime) {
if (datetime.getMonthOfYear() == 2) { // February is month 2!!
return datetime.getDayOfMonth() > 26;
}
return datetime.getDayOfMonth() > 28;
}
public Days daysToNewYear(LocalDate fromDate) {
LocalDate newYear = fromDate.plusYears(1).withDayOfYear(1);
return Days.daysBetween(fromDate, newYear);
}
public boolean isRentalOverdue(DateTime datetimeRented) {
Period rentalPeriod = new Period().withDays(2).withHours(12);
return datetimeRented.plus(rentalPeriod).isBeforeNow();
}
public String getBirthMonthText(LocalDate dateOfBirth) {
return dateOfBirth.monthOfYear().getAsText(Locale.ENGLISH);
}

Каковы основные вещи, которые не соответствуют текущим классам даты и времени?

Стивен: Существующие классы довольно плохие — вероятно, худшие API в JDK. Они глючные, изменчивые, громоздкие, много ошибок, и они, как правило, не безопасны.

Майкл: Оригинальный класс дат происходит от JDK 1.0. В то время Джеймс Гослинг пытался следовать смежным функциям в Си и не прикладывал особых усилий для их разработки с нуля. Например, они не могут быть интернационализированы и поддерживаются только местные часовые пояса.

Стивен: Точно. Класс григорианского календаря является прямым портом класса C, например, «Январь = 0». Итак, если вы введете месяц «12», это будет январь, потому что алгоритм оборачивается. Алгоритм выполняет такие вычисления, которые вы не ожидаете. Например, с классом григорианского календаря getYear (), getMonth () и getDay () работают быстро, в то время как при вызове комбинаций getyear (), setyear () (и getMonth () setMonth () и т. Д.) , производительность будет плохой, потому что многие вычисления выполняются неожиданно. Вежливо можно охарактеризовать эти классы как проявление «необычных характеристик производительности».

Почему это заняло так много времени, чтобы решить эти различные проблемы?

Стивен: Люди знали об этих проблемах в течение нескольких лет. Были предприняты некоторые попытки исправить класс Calendar, но он только ухудшился. Решение этих проблем раз и навсегда никогда не было достаточно высоким приоритетом.

Так почему сейчас и почему ты?

Стивен: Я запустил JodaTime в 2000/2001 году и постепенно решил стандартные проблемы с датой и временем, выпустив его в 2003 году. Мое решение было принято повсеместно, от небольших приложений до крупнейших рекламных систем в мире. Дело в том, что я хотел, чтобы решение существовало несколько лет как JodaTime, прежде чем отправиться в JSR, чтобы все проблемы были определены при подготовке к JSR.

В двух словах, что JodaTime предлагает мне?

Майкл: Во-первых, API лучшего качества.

 

Стивен: Во-вторых, JodaTime поддерживает ряд дополнительных концепций. Во-первых, «периоды», например, если вы хотите сохранить концепцию 5 недель и 3 дня. Во-вторых, «интервалы», чтобы вы могли сохранять интервал между началом JavaOne и его концом, например, с понедельника 5 мая, с 9 до 9 мая, 15 часов. В-третьих, обновленная реализация часового пояса. чтобы было легко подобрать изменения часового пояса, которые могут быть даже на ежегодной основе. Наконец, обработка различных календарных систем, таких как исламские календарные системы / коптские календарные системы и т. Д., Которых нет в стандартном JDK.

Майкл: Третий момент — это то, почему я заинтересовался этим JSR. Я из Бразилии, где системы летнего времени меняются каждый год, и всегда есть одна или две недели хаоса. Я спрашивал себя, почему каждый год что-то идет не так в связи с этой проблемой.

Стивен. Возможно, мы могли бы предложить решение, состоящее из файла JAR с последним набором правил, который вы затем могли бы поместить в путь к классам. Однако иногда вам понадобятся оба набора правил одновременно. Мы все еще думаем об этих ситуациях и должны быть в состоянии что-то придумать.

Кстати, откуда берется название «Йода»?

Стивен: «Joda» — это четырехбуквенное доменное имя, начинающееся с «J», которое было свободно в 2003 году. Я просто набрал случайные слова, начинающиеся с «J», и обнаружил, что это свободное имя …

Где сейчас процесс JSR?

Майкл: Мы прогрессируем в открытой манере. Все обсуждения находятся в публичных списках рассылки и вики. Все репозитории открыты, а Issuezilla открыта.

Стивен: Мы используем java.net для создания эталонной реализации и набора для тестирования в Subversion. Люди могут пойти туда и попробовать. Это все «работа в процессе». Базовый API есть. Прямо сейчас, парсинг должен быть закончен, и некоторые свободные концы должны быть убраны. В данный момент отсутствуют парсинг, интервалы и несколько календарных систем.

Можете ли вы сказать что-нибудь о временной шкале JSR?

Стивен: Мы надеемся, что мы будем в Java 7, но, учитывая отсутствие даты, нет гарантии, что мы закончим вовремя. Мы получили немного финансирования от задачи OpenJDK, чтобы добраться до ранней проверки проекта к августу.

Майкл: Очень важно, чтобы люди были вовлечены, последний шанс повлиять на аспекты дизайна — это предварительная проверка проекта, запланированная на август, которая приближается. Были сделаны две предыдущие попытки переписать эти классы, и вряд ли будет еще одна после нашей. Поэтому очень важно, чтобы ваш голос был услышан, потому что чем больше откликов, тем лучше.

Стивен: Там было хорошее качество обратной связи. У нас были предложения, состоящие из примеров реализаций интервалов, людей, указывающих на различные спецификации ISO, и предложений по расширению в области, выходящие за рамки нашей области. Люди должны взглянуть на алгоритмы тоже. Может быть, кто-то может придумать лучшие алгоритмы, чем те, которые у нас уже есть.

Майкл: Мы также были номинированы на премию программы JCP , вероятно, потому, что мы являемся основными примерами людей, а не компании, возглавляющей JSR. Результаты будут объявлены во вторник во время JavaOne.

Будете ли вы представить что-то вокруг вашего JSR на JavaOne?

Майкл: Наша техническая сессия в четверг в 1.30 полностью заполнена, и в пятницу в то же время повторная сессия, то есть в 1.30. На этом занятии мы рассмотрим все основные классы, покажем примеры кода и как начать с ним работать.

Стивен: Там будет немного объяснений вокруг принципов проектирования, с примерами того, насколько плохи текущие классы даты и времени. Также будет небольшая загадка, попросив участников определить количество ошибок в существующем фрагменте кода JDK …

 

Дальнейшее чтение