You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch中如何用FastDateFormat获取前一个工作日而非当前日期?

获取前一个工作日的Spring Batch配置方案

当然可以实现类似的配置,核心是先计算出前一个工作日的日期,再复用你现有的格式化逻辑。以下是具体实现步骤:

1. 编写工作日计算工具类

先创建一个静态工具类,处理前一个工作日的逻辑(自动排除周六、周日):

import java.util.Calendar;
import java.util.Date;

public class WorkingDateUtils {
    public static Date getPreviousWorkingDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());
        int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);

        // 周一的话,前一个工作日是上周五(往前推3天)
        if (dayOfWeek == Calendar.MONDAY) {
            calendar.add(Calendar.DATE, -3);
        }
        // 周日往前推2天到周五,周六往前推1天到周五
        else if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
            calendar.add(Calendar.DATE, dayOfWeek == Calendar.SUNDAY ? -2 : -1);
        }
        // 其他工作日直接往前推1天
        else {
            calendar.add(Calendar.DATE, -1);
        }
        return calendar.getTime();
    }
}

2. 修改Spring XML配置

复用你已有的fastDateFormat Bean,新增两个Bean来获取并格式化前一个工作日:

<!-- 保留原有的日期格式化Bean -->
<bean id="fastDateFormat" class="org.apache.commons.lang.time.FastDateFormat"
    factory-method="getInstance">
    <constructor-arg value="yyyyMMdd" />
</bean>

<!-- 获取前一个工作日的Date对象 -->
<bean id="previousWorkingDayDate" class="com.example.WorkingDateUtils"
    factory-method="getPreviousWorkingDay" />

<!-- 格式化前一个工作日为字符串 -->
<bean id="previousWorkingDay" class="java.lang.String" factory-bean="fastDateFormat"
    factory-method="format">
    <constructor-arg ref="previousWorkingDayDate" />
</bean>

扩展:支持节假日排除

如果需要排除法定节假日,可以扩展工具类,加入节假日校验逻辑:

import org.apache.commons.lang.time.FastDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Set;

public class WorkingDateUtils {
    private static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance("yyyyMMdd");
    // 可以从配置文件/数据库加载节假日列表
    private static final Set<String> HOLIDAYS = Set.of("20240501", "20241001");

    public static Date getPreviousWorkingDay() {
        Calendar calendar = Calendar.getInstance();
        calendar.setTime(new Date());

        do {
            int dayOfWeek = calendar.get(Calendar.DAY_OF_WEEK);
            if (dayOfWeek == Calendar.MONDAY) {
                calendar.add(Calendar.DATE, -3);
            } else if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.SATURDAY) {
                calendar.add(Calendar.DATE, dayOfWeek == Calendar.SUNDAY ? -2 : -1);
            } else {
                calendar.add(Calendar.DATE, -1);
            }
            // 如果当前日期是节假日,继续往前推
        } while (HOLIDAYS.contains(DATE_FORMAT.format(calendar.getTime())));

        return calendar.getTime();
    }
}

内容的提问来源于stack exchange,提问作者Ay123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 19:50:36