2013-08-19 4 views
0

У меня есть веб-приложение java, которое должно иметь дело с управлением ресурсами.java валидации с датами

Например

Dept  Min  Max Resource Effective Date  Last Date 
HR  1  3  Alex  08/19/2013  12/31/2013 
HR  1  3  Adam  08/19/2013  12/31/2013 

IT  2  5  Jade  08/19/2013  10/31/2013 
IT  2  5  Robert  11/01/2013  12/31/2013 
IT  2  5  Lisa  08/19/2013  12/31/2013 

У меня есть различные отделы, которые имеют заданную мин/макс сотрудников я могу выделить в качестве менеджера. Таким образом, HR-отдел имеет минимум 1 и максимум 3, я выделил 2 с сегодняшнего дня до конца года.

В ИТ-отделе я выделил неполные даты для Джейда и Робера считать их 1 за весь период. Лиза для конца. который вместе равен 2, который находится в диапазоне мин/макс.

В основном, в нижней строке в любой момент времени, я должен убедиться, что распределение не будет нарушать мин/макс правила. Итак, мне нужны предложения о том, как проверить эти сценарии в Java-приложении. Любой API с открытым исходным кодом, который вы нашли полезным.

+0

Вы нашли решение по вашей проблеме? – u6f6o

ответ

1

Если я понял ваш вопрос правильно, вы в принципе хотите узнать, какие интервалы перекрываются. Что касается дат, я обычно использую http://joda-time.sourceforge.net/, так как он имеет очень чистый и красивый API по сравнению с готовой java Date.

Joda время также предлагает интервалы и метод, чтобы проверить, если интервалы перекрытия: http://joda-time.sourceforge.net/apidocs/org/joda/time/Interval.html#overlap(org.joda.time.ReadableInterval)

Тем не менее он не работает для меня, как я хотел, чтобы проверить на основе каждого дня, таким образом, я должен был осуществить это сам , используя интервалы времени Joda в качестве базовых объектов:

public static boolean checkInteraction(Interval one, Interval another) { 
    return ((one.getEnd().equals(another.getStart()) || one.getEnd().isAfter(another.getStart())) && 
      (another.getEnd().isAfter(one.getStart()) || another.getEnd().equals(one.getStart()))); 
} 

Имея это в месте, вы можете пройти через интервалы и проверить, если они перекрываются/взаимодействуют и проверить, если он превышает свой номер макс.