Java通过月份获取当月工作日
程序员文章站
2022-05-17 21:37:24
...
因国家每年国定假日不确定,在开发中碰到需要获取日期是否为节假日的情况,若不考虑公司定制的假日判断,可以通过调用api接口,来判断该天是否为节假日
/** 判断该日期是否为节假日
*
* @param date 1,正常工作日 2,节假日 3,节假日后补班 4,周末
* @return
*/
public static int getIfHoliday(String date){
int flag=1;
try {
Map<String, Object> map = http://timor.tech/api/holiday/ + date, Map.class);
if (map.get("holiday") == null) {
flag = 1;
} else {
Map<String, Object> holidayDO = (Map) map.get("holiday");
Boolean object = (Boolean) holidayDO.get("holiday");
if (object) {
flag = 2;//节假日
} else {
flag = 3;//节假日补班
}
}
LocalDate localDate = LocalDate.parse(date);
int value = localDate.getDayOfWeek().getValue();
if(value==6 ||value==7){
if(flag!=3){//如果不是节假日补班情况,则返回周末
flag=4;//周末
}
}
}catch (Exception e){
e.printStackTrace();
logger.info("获取是否工作日异常.",e);
}
return flag;
}
通过年份和月份来获取该月所有的工作日集合
/**
* 获取当月的所有工作日
* @param year
* @param month
* @return
*/
public static List<String> getWolkdayInMonth(int year, int month) {
List<String> list = new ArrayList<String>();
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.YEAR, year);// 不设置的话默认为当年
calendar.set(Calendar.MONTH, month - 1);// 设置月份
calendar.set(Calendar.DAY_OF_MONTH, 1);// 设置为当月第一天
int daySize = calendar.getActualMaximum(Calendar.DAY_OF_MONTH);// 当月最大天数
for (int i = 0; i < daySize; i++) {
String format = DateUtils.format(calendar.getTime(),"yyyy-MM-dd");
int ifHoliday = getIfHoliday(format);
if(ifHoliday!=2){
int week = calendar.get(Calendar.DAY_OF_WEEK);
//周末休息
if ((week == Calendar.SATURDAY || week == Calendar.SUNDAY)) {// 1代表周日,7代表周六 判断这是一个星期的第几天从而判断是否是周末
//如果是补班,则属于正常上班时间
if(ifHoliday==3){
list.add(year+"-"+month+"-"+calendar.get(Calendar.DAY_OF_MONTH));
}
}else{
// 得到当天是一个月的第几天
list.add(year+"-"+month+"-"+calendar.get(Calendar.DAY_OF_MONTH));
}
}
calendar.add(Calendar.DATE, 1);//在第一天的基础上加1
}
return list;
}
上一篇: 判断是否为工作日
下一篇: java判断一个日期是否为工作日