在券商实际开发过程中,在做定投的时候,如果选择定投周期为周,那么就需要判断当前日期处于周几,如果处于周一-周五,正常扣款,如果处于星期天,延迟到下一周的交易日进行扣款。
使用java.util.Calendar进行当前日期的周几判断,是日历操作的工具类。
String debitDate="";//扣款日期
Date date=null;
/**
* 计算下一个扣款日
* 0-每周 1-每月
*/
String today=DateUtils.getNowDateTime();//获取今天的日期
//开始日期大于当前,取开始日期进行比较,否则取当天进行比较
if(beginDate.compareTo(today) > 0)
{
SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd");
date = format.parse(beginDate);
}
else
{
date = new Date();
}
if ("0".equals(surelyType)) {
//每周
//如果扣款日期大于今天,则取本周的
//如果扣款日期小于等于今天,则取下个周
Calendar cal = Calendar.getInstance(Locale.CHINA);
cal.setTime(date);
cal.setFirstDayOfWeek(Calendar.MONDAY);//将每周第一天设为星期一,默认是星期天
int week = cal.get(Calendar.DAY_OF_WEEK)-1;//获取指定日期的周几
if(week==0)week=7;
if (Integer.valueOf(surelyDate) >= week) {//如果周几类型大于等于当前周几,去当前日期
cal.set(Calendar.DAY_OF_WEEK, Integer.valueOf(surelyDate) + 1);//星期
}else{
cal.add(Calendar.WEEK_OF_MONTH, 1);//周数加1,即下周
cal.set(Calendar.DAY_OF_WEEK, Integer.valueOf(surelyDate) + 1);//星期
}
debitDate = DateHelper.formatDate(cal.getTime(), "yyyy-MM-dd");
}else if("1".equals(surelyType)){
//每月
//如果扣款日大于今天,则去本月的
//如果扣款日小于今天,则去下个月
if (surelyDate.length()==1) {
surelyDate="0"+surelyDate;
}
if (Integer.valueOf(surelyDate)>=Integer.valueOf(DateHelper.formatDate(date, "dd"))) {
debitDate=DateHelper.formatDate(date, "yyyy-MM")+"-"+surelyDate;
}else{
debitDate = DateHelper.formatDate(DateUtils.subMonth(date, 1), "yyyy-MM") + "-" + surelyDate;
}
}
这是只判断了周和月的定投,其中:
surelyType:定投类型0-每周 1-每月
surelyDate:定投日期:如果定投类型是每周,那么定投日期值范围为:1-5,如果定投类型为每月,那么定投日期值范围为:1-28
beginDate:开始日期:格式yyyyMMdd hh:mm:ss
这边计算出下一个扣款日后,去柜台获取当前扣款日的交易日。