【号外】Java日期函数-获取时间范围内非周末的日期集合

272 阅读1分钟

一、完整源码

/**
 * 获取两个日期之间的所有日期,去掉周末
 *
 * @param startDateStr 开始日期(数据格式:yyyy-MM-dd)
 * @param endDateStr   结束日期(数据格式:yyyy-MM-dd)
 */
public static List<String> getDatesNoWeekend(String startDateStr, String endDateStr) {
    List<String> result = new ArrayList<>();
    Calendar startDay = Calendar.getInstance();
    Calendar endDay = Calendar.getInstance();

    startDay.setTime(string2Date(startDateStr, "yyyy-MM-dd"));
    endDay.setTime(string2Date(endDateStr, "yyyy-MM-dd"));

    while (startDay.before(endDay)) {
        int week = startDay.get(Calendar.DAY_OF_WEEK);
        if (7 != week && 1 != week) {
            result.add(dateFormat(startDay.getTime(), "yyyy-MM-dd"));
        }
        startDay.add(Calendar.DAY_OF_YEAR, 1);
    }
    // 验证结束日期是否是周六周日
    int week = endDay.get(Calendar.DAY_OF_WEEK);
    if (7 != week && 1 != week) {
        result.add(dateFormat(endDay.getTime(), "yyyy-MM-dd"));
    }
    return result;
}
// 日期转字符
public static final String dateFormat(Object date) {
    return dateFormat(date, "yyyy-MM-dd");
}
// 日期转字符
public static final String dateFormat(Object date, String pattern) {
    if (date == null) {
        return null;
    } else {
        return pattern == null ? dateFormat(date) : (new SimpleDateFormat(pattern)).format(date);
    }
}
// 字符串转日期
public static Date string2Date(String source, String format) {
    SimpleDateFormat sdf = new SimpleDateFormat(format);
    try {
        return sdf.parse(source);
    } catch (ParseException var4) {
        var4.printStackTrace();
        return new Date();
    }
}

二、测试结果

image.png