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
相关产品推荐
相关产品推荐

