All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
cn.hutool.cron.pattern.CronPatternUtil Maven / Gradle / Ivy
package cn.hutool.cron.pattern;
import cn.hutool.core.date.CalendarUtil;
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
* 定时任务表达式工具类
*
* @author looly
*
*/
public class CronPatternUtil {
/**
* 列举指定日期之后内第一个匹配表达式的日期
*
* @param pattern 表达式
* @param start 起始时间
* @return 日期
* @since 5.8.30
*/
public static Date nextDateAfter(CronPattern pattern, Date start) {
return DateUtil.date(pattern.nextMatchAfter(CalendarUtil.calendar(start)));
}
/**
* 列举指定日期之后内第一个匹配表达式的日期
*
* @param pattern 表达式
* @param start 起始时间
* @param isMatchSecond 是否匹配秒(无效)
* @return 日期
* @since 4.5.8
* @deprecated isMatchSecond无效,使用 {@link #nextDateAfter(CronPattern, Date)}
*/
@Deprecated
public static Date nextDateAfter(CronPattern pattern, Date start, boolean isMatchSecond) {
return DateUtil.date(pattern.nextMatchAfter(CalendarUtil.calendar(start)));
}
/**
* 列举指定日期之后(到开始日期对应年年底)内所有匹配表达式的日期
*
* @param patternStr 表达式字符串
* @param start 起始时间
* @param count 列举数量
* @param isMatchSecond 是否匹配秒
* @return 日期列表
*/
public static List matchedDates(String patternStr, Date start, int count, boolean isMatchSecond) {
return matchedDates(patternStr, start, DateUtil.endOfYear(start), count, isMatchSecond);
}
/**
* 列举指定日期范围内所有匹配表达式的日期
*
* @param patternStr 表达式字符串
* @param start 起始时间
* @param end 结束时间
* @param count 列举数量
* @param isMatchSecond 是否匹配秒
* @return 日期列表
*/
public static List matchedDates(String patternStr, Date start, Date end, int count, boolean isMatchSecond) {
return matchedDates(patternStr, start.getTime(), end.getTime(), count, isMatchSecond);
}
/**
* 列举指定日期范围内所有匹配表达式的日期
*
* @param patternStr 表达式字符串
* @param start 起始时间
* @param end 结束时间
* @param count 列举数量
* @param isMatchSecond 是否匹配秒
* @return 日期列表
*/
public static List matchedDates(String patternStr, long start, long end, int count, boolean isMatchSecond) {
return matchedDates(new CronPattern(patternStr), start, end, count, isMatchSecond);
}
/**
* 列举指定日期范围内所有匹配表达式的日期
*
* @param pattern 表达式
* @param start 起始时间
* @param end 结束时间
* @param count 列举数量
* @param isMatchSecond 是否匹配秒
* @return 日期列表
*/
public static List matchedDates(CronPattern pattern, long start, long end, int count, boolean isMatchSecond) {
Assert.isTrue(start < end, "Start date is later than end !");
final List result = new ArrayList<>(count);
long step = isMatchSecond ? DateUnit.SECOND.getMillis() : DateUnit.MINUTE.getMillis();
for (long i = start; i < end; i += step) {
if (pattern.match(i, isMatchSecond)) {
result.add(DateUtil.date(i));
if (result.size() >= count) {
break;
}
}
}
return result;
}
}