1,获取前天日期
Date d = new Date(System.currentTimeMillis() - 2 * 1000 * 60 * 60 * 24);
SimpleDateFormat sp = new SimpleDateFormat("yyyyMMdd");
pbProductMapper.deleteProduct(sp.format(d));
2,判断单双号,周几,在原来日期基础上加一天
/**
* 判断星期是否可收货
*
* @param data
* @param planDeliveryDate
*/
private String checkWeek(LocationDeliveryCycle data, String planDeliveryDate) {
String newDay = planDeliveryDate;
// 原来到货日期是星期几
Date date = DateUtils.strToDate(planDeliveryDate, DateUtils.yyyyMMdd);
int weekDate = getWeekOfDate(date);
if (StringUtils.isEmpty(data.getOrderingCycleW())) {
return newDay;
} else {
if (!BizConstant.DELIVERY_WEEK.equals(data.getOrderingCycleW().substring(weekDate, weekDate + 1))) {
newDay = addOneDay(planDeliveryDate);
//场景到货日期是周日,不作业, 周一三五收食品 周二四六收用品,当前是用品,这时推一天,周一,但是用品二四六收,要再推一天
//先判断当前是不是周日,再判断周,是否符合规则;不用管是不是周日,再判断一次
Date sunDate = DateUtils.strToDate(newDay, DateUtils.yyyyMMdd);
int sunday = getWeekOfDate(sunDate);
if (!BizConstant.DELIVERY_WEEK.equals(data.getOrderingCycleW().substring(sunday, sunday + 1))) {
newDay = addOneDay(newDay);
}
}
}
return newDay;
}
/**
* 单双号逻辑处理
* @param cycle
* @param planDeliveryDate
* @return
*/
private String checkDate(LocationDeliveryCycle cycle, String planDeliveryDate) {
String newDay = planDeliveryDate;
String orderingCycleT = cycle.getOrderingCycleT();
// 未维护或每天
if (StringUtils.isEmpty(orderingCycleT) || orderingCycleT.equals(OrderingCycleEnum.DURING_FLAG_T_E.getValue())) {
return newDay;
}
//单号/双号
newDay = dealDoubleAndSingle(orderingCycleT, planDeliveryDate);
return newDay;
}
/**
* 休息日
* @param cycle
* @param planDeliveryDate
*/
private String checkHolidayDate(LocationDeliveryCycle cycle, String planDeliveryDate) {
String newDay = planDeliveryDate;
String orderingCycleH = cycle.getOrderingCycleH();
// 未维护
if (StringUtils.isEmpty(orderingCycleH)) {
return newDay;
}
List<String> list = Arrays.asList(orderingCycleH.split(","));
String day = planDeliveryDate.substring(6, planDeliveryDate.length());
if (list.get(0).equals(day)) {
newDay = addOneDay(planDeliveryDate);
}
return newDay;
}
/**
* 在原来日期基础上加一天
*
* @param day
*/
public String addOneDay(String day) {
Date date = DateUtils.strToDate(day, DateUtils.yyyyMMdd);
day = DateUtils.dateToStr(DateUtil.calculateDate(date, Calendar.DATE, 1), DateUtils.yyyyMMdd);
return day;
}
/**
* 处理日期单双号配置
*
* @param cycleType
* @param day
*/
private String dealDoubleAndSingle(String cycleType, String day) {
String planDeliveryDate = day;
if (StringUtil.isEmpty(day)) {
return day;
}
//双号
if (cycleType.equals(OrderingCycleEnum.DURING_FLAG_T_S.getValue())) {
if (Integer.valueOf(day) % 2 == 0) {
return day;
} else {
//获取当天第二天日期
planDeliveryDate = addOneDay(day);
//特殊场景:当前是31号,食品/食品双号收,推一天,1号,还是不收,解决:如果双号收,且是31号,直接推两天
if (BizConstant.IS_31.equals(day.substring(6, day.length()))) {
Date date = DateUtils.strToDate(day, DateUtils.yyyyMMdd);
planDeliveryDate = DateUtils.dateToStr(DateUtil.calculateDate(date, Calendar.DATE, 2), DateUtils.yyyyMMdd);
}
return planDeliveryDate;
}
}
//单号
if (cycleType.equals(OrderingCycleEnum.DURING_FLAG_T_D.getValue())) {
if (Integer.valueOf(day) % 2 != 0) {
return day;
} else {
//获取当天第二天日期
planDeliveryDate = addOneDay(day);
return planDeliveryDate;
}
}
return day;
}
/**
* 获取当前日期是星期几<br>
*
* @param date
* @return 当前日期是星期几
*/
public static int getWeekOfDate(Date date) {
int[] weekDays = {6, 0, 1, 2, 3, 4, 5};
Calendar cal = Calendar.getInstance();
cal.setTime(date);
int day = cal.get(Calendar.DAY_OF_WEEK) - 1;
if (day < 0) {
day = 0;
}
return weekDays[day];
}
本文详细介绍了如何在Java中进行日期的获取、判断与调整,包括获取前天日期、判断单双号及周几,以及在原有日期基础上加一天的算法实现。通过具体的代码示例,展示了日期逻辑处理的细节,如单双号逻辑、休息日处理和星期收货判断等。
2501

被折叠的 条评论
为什么被折叠?



