Я пишу программу на Java, и мне нужно определить, является ли определенная дата выходным или нет. Однако мне нужно учитывать, что в разных странах выходные приходятся на разные дни, т.е. в Израиле это пятница и суббота, а в некоторых исламских странах - четверг и пятница. Более подробную информацию вы можете найти в этой статье Википедии. Есть ли простой способ сделать это?
Как проверить, является ли определенная дата выходным с учетом текущей локали в Java?
Ответы (4)
Основываясь на присланной вами вики, я решил это для себя с помощью следующего кода:
private static final List<String> sunWeekendDaysCountries = Arrays.asList(new String[]{"GQ", "IN", "TH", "UG"});
private static final List<String> fryWeekendDaysCountries = Arrays.asList(new String[]{"DJ", "IR"});
private static final List<String> frySunWeekendDaysCountries = Arrays.asList(new String[]{"BN"});
private static final List<String> thuFryWeekendDaysCountries = Arrays.asList(new String[]{"AF"});
private static final List<String> frySatWeekendDaysCountries = Arrays.asList(new String[]{"AE", "DZ", "BH", "BD", "EG", "IQ", "IL", "JO", "KW", "LY", "MV", "MR", "OM", "PS", "QA", "SA", "SD", "SY", "YE"});
public static int[] getWeekendDays(Locale locale) {
if (thuFryWeekendDaysCountries.contains(locale.getCountry())) {
return new int[]{Calendar.THURSDAY, Calendar.FRIDAY};
}
else if (frySunWeekendDaysCountries.contains(locale.getCountry())) {
return new int[]{Calendar.FRIDAY, Calendar.SUNDAY};
}
else if (fryWeekendDaysCountries.contains(locale.getCountry())) {
return new int[]{Calendar.FRIDAY};
}
else if (sunWeekendDaysCountries.contains(locale.getCountry())) {
return new int[]{Calendar.SUNDAY};
}
else if (frySatWeekendDaysCountries.contains(locale.getCountry())) {
return new int[]{Calendar.FRIDAY, Calendar.SATURDAY};
}
else {
return new int[]{Calendar.SATURDAY, Calendar.SUNDAY};
}
}
Вы можете получить день недели (см.: Как определить день недели, передав конкретную дату?)
Затем просто проверьте, является ли этот день выходным в зависимости от выбранной страны.
Класс Java Calendar
имеет эту функциональность, getFirstDayOfWeek
метод. Цитата из документации Calendar
:
Календарь определяет семидневную неделю для конкретной локали с использованием двух параметров: первый день недели и минимальное количество дней в первой неделе (от 1 до 7). Эти числа берутся из данных ресурса локали при создании календаря. Они также могут быть указаны явно через методы установки их значений.
Таким образом, с этой информацией вы сможете рассчитать, является ли день выходным или нет.
final Calendar cal = Calendar.getInstance(new Locale("he_IL"));
System.out.println("Sunday is the first day of the week in he_IL? " + (Calendar.SUNDAY == cal.getFirstDayOfWeek()));
Выход:
Sunday is the first day of the week in he_IL? true
getFirstDayOfWeek
возвращает день, который обычно является первым в печатных календарях, а не первый день рабочей недели. ideone.com/zX4Pcc
- person zapl; 29.07.2013
Библиотека Jollyday может быть полезна для расчета праздников, http://jollyday.sourceforge.net/index.html