⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 crontrigger.java

📁 定时器开源项目, 相对于 jcrontab, Quartz 算是更完整的一个项目, 随著开发的版本上来, 他已经脱离只是写在程序里面的计时器, 在指定的时间或区间, 处理所指定的事件. 也加入了 se
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        if (list.contains(NO_SPEC)) return "?";        if (list.contains(ALL_SPEC)) return "*";        StringBuffer buf = new StringBuffer();        Iterator itr = list.iterator();        boolean first = true;        while (itr.hasNext()) {            Integer iVal = (Integer) itr.next();            String val = iVal.toString();            if (!first) buf.append(",");            buf.append(val);            first = false;        }        return buf.toString();    }    protected int skipWhiteSpace(int i, String s) {        for (; i < s.length() && (s.charAt(i) == ' ' || s.charAt(i) == '\t'); i++)            ;        return i;    }    protected int findNextWhiteSpace(int i, String s) {        for (; i < s.length() && (s.charAt(i) != ' ' || s.charAt(i) != '\t'); i++)            ;        return i;    }    protected void addToSet(int val, int end, int incr, int type)            throws ParseException {        TreeSet set = getSet(type);        if (type == SECOND || type == MINUTE) {            if ((val < 0 || val > 59 || end > 59) && (val != ALL_SPEC_INT))                    throw new ParseException(                            "Minute and Second values must be between 0 and 59",                            -1);        } else if (type == HOUR) {            if ((val < 0 || val > 23 || end > 23) && (val != ALL_SPEC_INT))                    throw new ParseException(                            "Hour values must be between 0 and 23", -1);        } else if (type == DAY_OF_MONTH) {            if ((val < 1 || val > 31 || end > 31) && (val != ALL_SPEC_INT)                    && (val != NO_SPEC_INT))                    throw new ParseException(                            "Day of month values must be between 1 and 31", -1);        } else if (type == MONTH) {            if ((val < 1 || val > 12 || end > 12) && (val != ALL_SPEC_INT))                    throw new ParseException(                            "Month values must be between 1 and 12", -1);        } else if (type == DAY_OF_WEEK) {            if ((val == 0 || val > 7 || end > 7) && (val != ALL_SPEC_INT)                    && (val != NO_SPEC_INT))                    throw new ParseException(                            "Day-of-Week values must be between 1 and 7", -1);        }        if ((incr == 0 || incr == -1) && val != ALL_SPEC_INT) {            if (val != -1) set.add(new Integer(val));            else                set.add(NO_SPEC);            return;        }        int startAt = val;        int stopAt = end;        if (val == ALL_SPEC_INT && incr <= 0) {            incr = 1;            set.add(ALL_SPEC); // put in a marker, but also fill values        }        if (type == SECOND || type == MINUTE) {            if (stopAt == -1) stopAt = 59;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 0;        } else if (type == HOUR) {            if (stopAt == -1) stopAt = 23;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 0;        } else if (type == DAY_OF_MONTH) {            if (stopAt == -1) stopAt = 31;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 1;        } else if (type == MONTH) {            if (stopAt == -1) stopAt = 12;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 1;        } else if (type == DAY_OF_WEEK) {            if (stopAt == -1) stopAt = 7;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 1;        } else if (type == YEAR) {            if (stopAt == -1) stopAt = 2099;            if (startAt == -1 || startAt == ALL_SPEC_INT) startAt = 1970;        }        for (int i = startAt; i <= stopAt; i += incr)            set.add(new Integer(i));    }    protected TreeSet getSet(int type) {        switch (type) {        case SECOND:            return seconds;        case MINUTE:            return minutes;        case HOUR:            return hours;        case DAY_OF_MONTH:            return daysOfMonth;        case MONTH:            return months;        case DAY_OF_WEEK:            return daysOfWeek;        case YEAR:            return years;        default:            return null;        }    }    protected ValueSet getValue(int v, String s, int i) {        char c = s.charAt(i);        String s1 = String.valueOf(v);        while (c >= '0' && c <= '9') {            s1 += c;            i++;            if (i >= s.length()) break;            c = s.charAt(i);        }        ValueSet val = new ValueSet();        if (i < s.length()) val.pos = i;        else            val.pos = i + 1;        val.value = Integer.parseInt(s1);        return val;    }    protected int getNumericValue(String s, int i) {        int endOfVal = findNextWhiteSpace(i, s);        String val = s.substring(i, endOfVal);        return Integer.parseInt(val);    }    protected int getMonthNumber(String s) {        Integer integer = (Integer) monthMap.get(s);        if (integer == null) return -1;        return integer.intValue();    }    protected int getDayOfWeekNumber(String s) {        Integer integer = (Integer) dayMap.get(s);        if (integer == null) return -1;        return integer.intValue();    }    protected Date getTime(int sc, int mn, int hr, int dayofmn, int mon) {        try {            Calendar cl = Calendar.getInstance(getTimeZone());            //cl.add(Calendar.DAY_OF_MONTH,);            if (hr >= 0 && hr <= 12) cl.set(Calendar.AM_PM, Calendar.AM);            if (hr >= 13 && hr <= 23) cl.set(Calendar.AM_PM, Calendar.PM);            cl.setLenient(false);            if (sc != -1) cl.set(Calendar.SECOND, sc);            if (mn != -1) cl.set(Calendar.MINUTE, mn);            if (hr != -1) cl.set(Calendar.HOUR_OF_DAY, hr);            if (dayofmn != -1) cl.set(Calendar.DAY_OF_MONTH, dayofmn);            if (mon != -1) cl.set(Calendar.MONTH, mon);            return cl.getTime();        } catch (Exception e) {            return null;        }    }    ////////////////////////////////////////////////////////////////////////////    //    // Computation Functions    //    ////////////////////////////////////////////////////////////////////////////    protected Date getTimeAfter(Date afterTime) {        Calendar cl = Calendar.getInstance(getTimeZone());        // move ahead one second, since we're computing the time *after* the        // given time        afterTime = new Date(afterTime.getTime() + 1000);        // CronTrigger does not deal with milliseconds        cl.setTime(afterTime);        cl.set(Calendar.MILLISECOND, 0);        boolean gotOne = false;        // loop until we've computed the next time, or we've past the endTime        while (!gotOne) {            if (endTime != null && cl.getTime().after(endTime)) return null;            SortedSet st = null;            int t = 0;            int sec = cl.get(Calendar.SECOND);            int min = cl.get(Calendar.MINUTE);            // get second.................................................            st = seconds.tailSet(new Integer(sec));            if (st != null && st.size() != 0) {                sec = ((Integer) st.first()).intValue();            } else {                sec = ((Integer) seconds.first()).intValue();                min++;                cl.set(Calendar.MINUTE, min);            }            cl.set(Calendar.SECOND, sec);            min = cl.get(Calendar.MINUTE);            int hr = cl.get(Calendar.HOUR_OF_DAY);            t = -1;            // get minute.................................................            st = minutes.tailSet(new Integer(min));            if (st != null && st.size() != 0) {                t = min;                min = ((Integer) st.first()).intValue();            } else {                min = ((Integer) minutes.first()).intValue();                hr++;            }            if (min != t) {                cl.set(Calendar.SECOND, 0);                cl.set(Calendar.MINUTE, min);                setCalendarHour(cl, hr);                continue;            }            cl.set(Calendar.MINUTE, min);            hr = cl.get(Calendar.HOUR_OF_DAY);            int day = cl.get(Calendar.DAY_OF_MONTH);            t = -1;            // get hour...................................................            st = hours.tailSet(new Integer(hr));            if (st != null && st.size() != 0) {                t = hr;                hr = ((Integer) st.first()).intValue();            } else {                hr = ((Integer) hours.first()).intValue();                day++;            }            if (hr != t) {                cl.set(Calendar.SECOND, 0);                cl.set(Calendar.MINUTE, 0);                cl.set(Calendar.DAY_OF_MONTH, day);                setCalendarHour(cl, hr);                continue;            }            cl.set(Calendar.HOUR_OF_DAY, hr);            day = cl.get(Calendar.DAY_OF_MONTH);            int mon = cl.get(Calendar.MONTH) + 1;            // '+ 1' because calendar is 0-based for this field, and we are            // 1-based            t = -1;            int tmon = mon;                        // get day...................................................            boolean dayOfMSpec = !daysOfMonth.contains(NO_SPEC);            boolean dayOfWSpec = !daysOfWeek.contains(NO_SPEC);            if (dayOfMSpec && !dayOfWSpec) { // get day by day of month rule                st = daysOfMonth.tailSet(new Integer(day));                if (lastdayOfMonth) {                    if(!nearestWeekday) {                        t = day;                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));                    }                    else {                        t = day;                        day = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));                                                java.util.Calendar tcal = java.util.Calendar.getInstance();                        tcal.set(Calendar.SECOND, 0);                        tcal.set(Calendar.MINUTE, 0);                        tcal.set(Calendar.HOUR_OF_DAY, 0);                        tcal.set(Calendar.DAY_OF_MONTH, day);                        tcal.set(Calendar.MONTH, mon - 1);                        tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));                                                int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));                        int dow = tcal.get(Calendar.DAY_OF_WEEK);                        if(dow == Calendar.SATURDAY && day == 1)                            day += 2;                        else if(dow == Calendar.SATURDAY)                            day -= 1;                        else if(dow == Calendar.SUNDAY && day == ldom)                             day -= 2;                        else if(dow == Calendar.SUNDAY)                             day += 1;                                            tcal.set(Calendar.SECOND, sec);                        tcal.set(Calendar.MINUTE, min);                        tcal.set(Calendar.HOUR_OF_DAY, hr);                        tcal.set(Calendar.DAY_OF_MONTH, day);                        tcal.set(Calendar.MONTH, mon - 1);                        Date nTime = tcal.getTime();                        if(nTime.before(afterTime)) {                            day = 1;                            mon++;                        }                    }                } else if(nearestWeekday) {                    t = day;                    day = ((Integer) daysOfMonth.first()).intValue();                    java.util.Calendar tcal = java.util.Calendar.getInstance();                    tcal.set(Calendar.SECOND, 0);                    tcal.set(Calendar.MINUTE, 0);                    tcal.set(Calendar.HOUR_OF_DAY, 0);                    tcal.set(Calendar.DAY_OF_MONTH, day);                    tcal.set(Calendar.MONTH, mon - 1);                    tcal.set(Calendar.YEAR, cl.get(Calendar.YEAR));                                        int ldom = getLastDayOfMonth(mon, cl.get(Calendar.YEAR));                    int dow = tcal.get(Calendar.DAY_OF_WEEK);                    if(dow == Calendar.SATURDAY && day == 1)                        day += 2;                    else if(dow == Calendar.SATURDAY)                        day -= 1;                    else if(dow == Calendar.SUNDAY && day == ldom)                         day -= 2;                    else if(dow == Calendar.SUNDAY)                         day += 1;                                                            tcal.set(Calendar.SECOND, sec);                    tcal.set(Calendar.MINUTE, min);                    tcal.set(Calendar.HOUR_OF_DAY, hr);                    tcal.set(Calendar.DAY_OF_MONTH, day);                    tcal.set(Calendar.MONTH, mon - 1);                    Date nTime = tcal.getTime();                    if(nTime.before(afterTime)) {                        day = ((Integer) daysOfMonth.first()).intValue();;                        mon++;                    }                }                else if (st != null && st.size() != 0) {                    t = day;                    day = ((Integer) st.first()).intValue();                } else {                    day = ((Integer) daysOfMonth.first()).intValue();                    mon++;                }                                if (day != t || mon != tmon) {                    cl.set(Calendar.SECOND, 0);                    cl.set(Calendar.MINUTE, 0);                    cl.set(Calendar.HOUR_OF_DAY, 0);                    cl.set(Calendar.DAY_OF_MONTH, day);                    cl.set(Calendar.MONTH, mon - 1);                    // '- 1' because calendar is 0-based for this field, and we                    // are 1-based                    continue;                }            } else if (dayOfWSpec && !dayOfMSpec) { // get day by day of week rule                if (lastdayOfWeek) { // are we looking for the last XXX day of                    // the month?                    int dow = ((Integer) days

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -