Quartz 定时任务使用 —— 探究DateBuilder用法(十二)

Quartz 定时任务使用

官方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.56.41.png

运行示例

当前时间: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(分钟位),然后加上时间间隔;返回离初始时间最近的,比初始时间大的结果时间(在时间间隔范围内),如下图所示

WX20170913-161206@2x.png

对应的方法有

  • 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用法(十二)

点  赞 (2) 打  赏
分享到: