Мы создаем приложение для планирования, и нам нужно представлять какое-то доступное расписание в течение дня, независимо от того, в каком часовом поясе они находятся. Принимая сигнал из интервала времени Joda, который представляет интервал в абсолютном времени между двумя экземплярами ( start inclusive, end exclusive), мы создали LocalInterval. LocalInterval состоит из двух LocalTimes (start inclusive, end exclusive), и мы даже сделали удобный класс для сохранения этого в Hibernate.
Например, если кто-то доступен с 13:00 до 17:00, мы создадим:
new LocalInterval(new LocalTime(13, 0), new LocalTime(17, 0));
До сих пор так хорошо - пока кто-то не захочет быть доступным с 11:00 до полуночи в какой-то день. Поскольку конец интервала является исключительным, это должно быть легко представлено как таковое:
new LocalInterval(new LocalTime(23, 0), new LocalTime(24, 0));
Ack! Нет. Это вызывает исключение, потому что LocalTime не может содержать час, превышающий 23.
Это кажется ошибкой дизайна для меня --- Джода не считал, что кому-то может понадобиться LocalTime, который представляет собой не включительную конечную точку.
Это действительно разочаровывает, поскольку он пробивает дыру в том, что было в противном случае очень элегантной моделью, которую мы создали.
Каковы мои варианты --- кроме форкинга Джоды и вынимать чек на час 24? (Нет, мне не нравится вариант использования фиктивного значения --- скажем, 23:59:59 --- для представления 24:00.)
Обновление: тем, кто продолжает говорить, что нет такой вещи, как 24:00, здесь цитата из ISO 8601-2004 4.2.3 Примечания 2,3: "Конец одного календарного дня [24:00] совпадает с [00:00] в начале следующего календарного дня..." и "Представления, где [hh] имеет значение [24], предпочтительнее представлять конец временного интервала..."