实现CronExpression的getFinalFireTime(),写的急,大家再改改!

class MyCronExpr extends CronExpression
{
    /**
     * 返回最后一次执行的时间;
     * @return
     */
    public Date getFinalFireTime()
    {
        Calendar ret = Calendar.getInstance();
        Integer day = getMaxField(this.daysOfMonth, "Day");
        
        ret.set(Calendar.YEAR, getMaxField(this.years, "Year"));                    //设置年
        ret.set(Calendar.MONTH, getMaxField(this.months, "Month") - 1);             //设置月
        if (day != 0)
            ret.set(Calendar.DAY_OF_MONTH, getMaxField(this.daysOfMonth, "Day"));   //设置日
        else
            ret.set(Calendar.DAY_OF_WEEK, getMaxField(this.daysOfWeek, "Week"));    //设置周
        if (this.nthdayOfWeek != 0)
        {
            ret.set(Calendar.WEEK_OF_MONTH, this.nthdayOfWeek);
        }
        
        ret.set(Calendar.HOUR_OF_DAY, getMaxField(this.hours, "Hour"));              //设置小时
        ret.set(Calendar.MINUTE, getMaxField(this.minutes, "Minute"));               //设置分钟
        ret.set(Calendar.SECOND, getMaxField(this.seconds, "Second"));               //设置秒
        
        return ret.getTime();
    }

    public MyCronExpr(String expr) throws ParseException
    {
        super(expr);
    }
    
    private Integer getMaxField(TreeSet set, String field)
    {
        if (set == null)
        {
            return null;
        }
        
        Integer ret = 0;
        Integer temp = 0;
        Integer maxVal = 0;
        
        if ("Year".equalsIgnoreCase(field))
        {
            maxVal = 2099;
        }
        else if("Month".equalsIgnoreCase(field))
        {
            maxVal = 12;
        }
        else if("Week".equalsIgnoreCase(field))
        {
            maxVal = 7;
        }
        else if("Day".equalsIgnoreCase(field))
        {
            maxVal = 31;
        }
        else if("Hour".equalsIgnoreCase(field))
        {
            maxVal = 23;
        }
        else if("Minute".equalsIgnoreCase(field))
        {
            maxVal = 59;
        }
        else if("Second".equalsIgnoreCase(field))
        {
            maxVal = 59;
        }
        
        Iterator item = set.iterator();
        while (item.hasNext())
        {
            temp = (Integer)item.next();
            if (temp > ret && temp <= maxVal)
            {   //取最大者;
                ret = temp;
            }
        }
        
        return ret;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值