官方API:http://www.quartz-scheduler.org/api/2.2.1/index.html
todayAt 今天的某个时间
todayAt(int hour, int minute, int second)
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date runTime = DateBuilder.todayAt(16,38,10); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
运行示例
当前时间:2017-09-13 16:41:53 runTime:2017-09-13 16:38:10
对应的方法有
-
todayAt:今天的某个时间
-
tomorrowAt:明天的某个时间
evenMinuteDate 返回下一分钟的开始时间
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date runTime = DateBuilder.evenMinuteDate(new Date()); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
运行示例
当前时间:2017-09-13 15:07:55 runTime:2017-09-13 15:08:00 当前时间:2017-09-13 15:08:17 runTime:2017-09-13 15:09:00
对应的方法有
-
evenSecondDate(new Date()):下一秒
-
evenMinuteDate(new Date()):下一分钟
-
evenHourDate(new Date()):下一小时
-
evenSecondDateAfterNow():当前时间的下一秒
-
evenMinuteDateAfterNow():当前时间的下一分钟
-
evenHourDateAfterNow():当前时间的下一小时
evenMinuteDateBefore 获取开始时间
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date runTime = DateBuilder.evenMinuteDateBefore(new Date()); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
运行示例
当前时间:2017-09-13 15:41:22 runTime:2017-09-13 15:41:00 当前时间:2017-09-13 15:41:51 runTime:2017-09-13 15:41:00
对应的方法有
-
evenSecondDateBefore(new Date()):秒的开始执行时间,例如:2017-09-13 15:07:55
-
evenMinuteDateBefore(new Date()):分钟的开始执行时间,例如:2017-09-13 15:41:00
-
evenHourDateBefore(new Date()):小时的开始执行时间,例如:2017-09-13 15:00:00
dateOf 指定日期
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date dateOf_1 = DateBuilder.dateOf(13,10,10); Date dateOf_2 = DateBuilder.dateOf(13,10,10,1,1); Date dateOf_3 = DateBuilder.dateOf(13,10,10,1,1,2016); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("dateOf_1:" + sdf.format(dateOf_1)); System.out.println("dateOf_2:" + sdf.format(dateOf_2)); System.out.println("dateOf_3:" + sdf.format(dateOf_3)); }
运行示例
当前时间:2017-09-13 15:54:47 dateOf_1:2017-09-13 13:10:10 dateOf_2:2017-01-01 13:10:10 dateOf_3:2016-01-01 13:10:10
nextGivenMinuteDate 下一个给定分钟日期
先看示例
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date runTime = DateBuilder.nextGivenMinuteDate(new Date(),1); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
运行示例
当前时间:2017-09-13 15:59:55 runTime:2017-09-13 16:00:00 当前时间:2017-09-13 16:00:19 runTime:2017-09-13 16:20:00
例如:一个参数输入的日期为 08:13:54,另一个输入的基准时间间隔为5分钟,将会产生的结果是日期类型的时间:08:15:00
这个是什么原因呢,看似没有任何规律,但是细心看下面更多的示例,就会发现:间隔是20分钟,不同的结果都是从11:00、11:20、11:40这样显示的,结果初始值都是00(分钟位),然后加上时间间隔;返回离初始时间最近的,比初始时间大的结果时间(在时间间隔范围内),如下图所示
对应的方法有
-
nextGivenSecondDate:下一个给定秒的时间
-
nextGivenMinuteDate:下一个给定分钟的时间
translateTime 转换时间
translateTime方法有三个参数(date,src,dest),返回转换后的时间
-
date:需要转换的时间
-
src:原始时区
-
dest:目标时区
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 转换时区 “美国/洛杉矶” Date runTime = DateBuilder.translateTime(new Date(), TimeZone.getDefault(),TimeZone.getTimeZone("America/Los_Angeles")); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
运行示例
当前时间:2017-09-13 16:25:55 runTime:2017-09-14 07:25:55
futureDate 未来时间
futureDate(int interval,DateBuilder.IntervalUnit unit)
-
interval:间隔
-
unit:间隔单位,毫秒、秒、分钟、小时、天、周、月、年
public static void main(String[] args) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date runTime = DateBuilder.futureDate(10, DateBuilder.IntervalUnit.MINUTE); System.out.println("当前时间:" + sdf.format(new Date())); System.out.println("runTime:" + sdf.format(runTime)); }
查看源代码可以发现unit是存在于DateBuilder的内部类,源码如下
public static enum IntervalUnit { MILLISECOND, SECOND, MINUTE, HOUR, DAY, WEEK, MONTH, YEAR; private IntervalUnit() { } }
除了上面返回Date类型的方法之外还有另外几个方法
4个返回DateBuilder类型方法
-
newDate()
-
newDateInLocale(Locale)
-
newDateInTimezone(Timezone)
-
newDateInTimeZoneAndLocale(Timezone, Locale)
7个void验证方法
-
validateSecond(int)
-
validateMinute(int)
-
validateHour(int)
-
validateDayOfMonth(int)
-
validateDayOfWeek(int)
-
validateMonth(int)
-
validateYear(int)
未经允许请勿转载:程序喵 » Quartz 定时任务使用 —— 探究DateBuilder用法(十二)