Пересечение границы недели
Другие ответы хороши (мне особенно нравится решение EnumSet
Базиля Бурка ). Кажется, все они предполагают (1), что ваши два входных дня находятся в одной и той же неделе, и (2) что неделя начинается в понедельник, как перечисление DayOfWeek
. А что, если входными данными были пятница и понедельник, мы бы не хотели пятница, суббота, воскресенье, понедельник ? Что если пользователь в США и ожидает, что воскресенье и вторник принесут воскресенье, понедельник, вторник ? Воскресенье - первый день недели там (и в некоторых других местах также).
Я думаю, что с учетом этих возможностей нет лучшего решения, чем классический l oop.
DayOfWeek input1 = DayOfWeek.FRIDAY;
DayOfWeek input2 = DayOfWeek.MONDAY;
List<DayOfWeek> range = new ArrayList<>(7);
DayOfWeek currentDow = input1;
range.add(currentDow);
while (! currentDow.equals(input2)) {
currentDow = currentDow.plus(1);
range.add(currentDow);
}
System.out.println(range);
Вывод:
[ПЯТНИЦА, Суббота, воскресенье, понедельник]
Поскольку я использую список, а не набор, дни приходят в порядок. К счастью, метод plus
имеет переполнение циклического c: SUNDAY.plus(1)
дает MONDAY
, первый член перечисления.
Не пересекает границу недели
Если требуется, чтобы вы не переходили на следующую неделю (с воскресенья по понедельник), вам следует проверить, что ваши входные данные соответствуют требованию, а затем использовать один из других ответов. Пример проверки:
if (input1.getValue() > input2.getValue()) {
throw new IllegalStateException("Inputs muct be in chronological order within the same Monday-based week");
}