精华内容
下载资源
问答
  • 对于非绝对时间的cron表达式,可以根据上次执行时间 获取下次执行时间。 spring中已经提供了工具类,在旧版中叫做 CronSequenceGenerator 随着spring的更新 这个类已经被标记为过期了 取而代之的是 ...

    cron表达式大部分用来表示一个执行间隔,或一个具体时间

    对于非绝对时间的cron表达式,可以根据上次执行时间 获取到下次执行时间。

    spring中已经提供了工具类,在旧版中叫做

    CronSequenceGenerator

    随着spring的更新 这个类已经被标记为过期了 取而代之的是

    CronExpression

    使用方法很简单 这个类只有一个parse的初始化方法 以及一个next方法。

     

            final CronExpression cronExpression = CronExpression.parse("0 0/12 * * * ?");
            final LocalDateTime dateTime = cronExpression.next(LocalDateTime.now());

     

    展开全文
  • import org.quartz.TriggerUtils;import org.quartz.impl.StdSchedulerFactory;import org.quartz.impl.triggers...public static Date getNTimeByCron(String cron) {try {//根据cron算出该任务的下次执行时间CronT...

    import org.quartz.TriggerUtils;

    import org.quartz.impl.StdSchedulerFactory;

    import org.quartz.impl.triggers.CronTriggerImpl;

    public static Date getNTimeByCron(String cron) {

    try {

    //根据cron算出该任务的下次执行时间

    CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();

    cronTriggerImpl.setCronExpression(cron);

    Calendar calendar = Calendar.getInstance();

    Date now = calendar.getTime();

    // 把统计的区间段设置为从现在到2年后的今天(主要是为了方法通用考虑,如那些1个月跑一次的任务,如果时间段设置的较短就不足20条)

    calendar.add(Calendar.YEAR, 2);

    // 这个是重点,一行代码搞定

    List dates = TriggerUtils.computeFireTimesBetween(cronTriggerImpl, null, now, calendar.getTime());

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    String nextTime = dateFormat.format(dates.get(0));

    Date date=dateFormat.parse(nextTime);

    return date;

    } catch (Exception e) {

    throw new RuntimeException(e);

    }

    }

    展开全文
  • 我实际上并没有使用Quartz安排工作 .CronTrigger中有一个名为getFireTimeAfter(Date)的方法,它给出下一次作业将在给定日期之后触发的时间 . 当提供的日期现在或将来时,这很有效 . 但如果日期已经过去,它似乎不起...

    我正在使用Quartz CronTrigger工具来解析cron调度格式字符串,以确定何时应运行特定作业 . 我实际上并没有使用Quartz安排工作 .

    CronTrigger中有一个名为getFireTimeAfter(Date)的方法,它给出下一次作业将在给定日期之后触发的时间 . 当提供的日期现在或将来时,这很有效 . 但如果日期已经过去,它似乎不起作用 .

    Date currTime = new Date();

    CronTrigger tr = new CronTrigger();

    tr.setCronExpression("0 0 23 3,18 * ? *");

    Date nextFireAt = tr.getFireTimeAfter(currTime);

    System.out.println("Reference time: " + currTime);

    System.out.println("Next fire after reference time: " + nextFireAt);

    这是每月3日和18日23:00开火的cron时间表 . 例如,如果我今天(8月11日)这样做,我看到:

    Reference time: Thu Aug 11 10:04:25 MDT 2011

    Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011

    但是,如果我将参考日期设置为过去,它会给我相同的下一个开火时间 .

    Reference time: Wed Dec 31 17:00:00 MST 1969

    Next fire after reference time: Thu Aug 18 23:00:00 MDT 2011

    我期待输出为:

    Reference time: Wed Dec 31 17:00:00 MST 1969

    Next fire after reference time: Wed Aug 3 23:00:00 MDT 2011

    方法是不是打算以这种方式工作,还是我做错了什么?

    谢谢!

    展开全文
  • 在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通threadjava起一个定时任务,其实不难,代码很简单,只要你知道方法,2分钟就搞掂了。定时任务控制类...

    在应用里经常都有用到在后台跑定时任务的需求。举个例子,比如需要在服务后台跑一个定时任务来进行非实时计算,清除临时数据、文件等。在本文里,我会给大家介绍3种不同的实现方法: 普通thread实现 TimerTask实现 ScheduledExecutorService实现 普通thread

    java起一个定时任务,其实不难,代码很简单,只要你知道方法,2分钟就搞掂了。

    定时任务控制类:

    package com.comit.sc.job.dms;

    import java.util.Calendar;

    import javax.servlet.ServletContextEvent;

    import javax.servlet.ServletContextListener;

    import org.quartz.CronTrigger;

    import org.quartz.JobDetail;

    import org.quartz.Scheduler;

    import org.quartz.SchedulerException;

    import org.quartz.SchedulerFactory;

    import org.quartz.SimpleTrigger;

    import org.quartz.impl.StdSchedulerFactory;

    import com.comit.sc.job.action.DmsTimedTaskJobAction;

    /**

    * @author zyf

    * @TODO 定时任务控制类

    *

    */

    public class DmsTimedTaskJob implements ServletContextListener {

    @SuppressWarnings("unused")

    private static final SimpleTrigger CronTrigger = null;

    public static void main(String[] args){

    try {

    test();

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    public static void test() throws Exception{

    //通过SchedulerFactory来获取一个调度器

    SchedulerFactory schedulerFactory = new StdSchedulerFactory();

    Scheduler scheduler;

    try {

    scheduler = schedulerFactory.getScheduler();

    //引进作业程序

    JobDetail jobDetail =

    new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);

    //new一个触发器

    //SimpleTrigger simpleTrigger = new SimpleTrigger("simpleTrigger", "triggerGroup-s1");

    CronTrigger trigger =  new CronTrigger("Test", null, "0 0 9 * * ?");  //表示每天9点执行

    //设置作业启动时间

    //long ctime = System.currentTimeMillis()+1000*30;  //表示30秒之后启动 测试时用1000*5

    //simpleTrigger.setStartTime(new Date(ctime));

    Calendar cal = Calendar.getInstance();

    trigger.setStartTime(cal.getTime());

    //设置作业执行间隔

    //simpleTrigger.setRepeatInterval(1000*18000); //设置成每天5个小时提醒一次18000 测试时用300

    //设置作业执行次数

    //simpleTrigger.setRepeatCount(-1);  //测试时用10,-1表示无限次

    //设置作业执行优先级默认为5

    // simpleTrigger.setPriority(10);

    //作业和触发器设置到调度器中

    scheduler.scheduleJob(jobDetail, trigger);

    //启动调度器

    scheduler.start();

    } catch (SchedulerException e) {

    // TODO Auto-generated catch block

    System.out.println("启动定时任务失败!");

    }

    }

    public void contextInitialized(ServletContextEvent arg0) {

    // TODO Auto-generated method stub

    //System.out.println("启动触发器");

    try {

    test();

    } catch (Exception e) {

    // TODO Auto-generated catch block

    e.printStackTrace();

    }

    }

    public void contextDestroyed(ServletContextEvent arg0) {

    // TODO Auto-generated method stub

    //System.out.println("关闭触发器");

    }

    }

    上述方法就已经启动了一个定时器,每天早上9点执行。

    注解:

    JobDetail jobDetail = new JobDetail("jobDetail-s1", "jobDetailGroup-s1", DmsTimedTaskJobAction.class);

    这一行代码引进一个作业,时间片到了,就会执行DmsTimedTaskJobAction类的execute方法。

    CronTrigger trigger =  new CronTrigger("Test", null, "0 0 9 * * ?");  //表示每天9点执行

    这一行代码产生一个定时器对象,并规定在每天早上9点钟就会执行。

    scheduler.scheduleJob(jobDetail, trigger);

    这一行代码将定时器和作业程序关联,实现定时执行作业的效果。

    定时任务控制类讲解到此。

    下面介绍具体的作业程序。

    定时任务具体作业类:

    package com.comit.sc.job.action;

    import java.text.SimpleDateFormat;

    import java.util.Date;

    import org.quartz.Job;

    import org.quartz.JobExecutionContext;

    import org.quartz.JobExecutionException;

    import com.comit.dockapply.service.DockApplyService;

    import com.comit.portlicenceinfo.service.PortLicenceInfoService;

    /**

    * 描述:定时任务 实体执行类

    *

    * @author zyf

    *

    */

    public class DmsTimedTaskJobAction  implements Job{

    /**

    * 序列号

    */

    private static final long serialVersionUID = 1427096854754L;

    public DmsTimedTaskJobAction() throws Exception{

    super();

    }

    /**

    * 所有需要执行的定时任务,都要写在这个方法体内

    */

    public void execute(JobExecutionContext arg0) throws JobExecutionException {

    System.out.println("=============================================================================================");

    System.out.println(new SimpleDateFormat("yy年MM月dd日 hh:mm:ss").format(new Date()));

    try {

    System.out.println("********证书过期提前短信通知定时任务启动!********");

    //这里添加具体需要执行的方法,这里把我系统中的方法去掉了

    System.out.println("********证书过期提前短信通知定时任务顺利结束!********");

    } catch (Exception e) {

    System.out.println("********证书过期提前短信通知定时任务执行失败!********");

    }

    System.out.println("=============================================================================================");

    }

    }

    这个类就没什么好讲的了。一看就懂了。

    尾注:对于如何定义这个定时任务的执行时间,大家可以参考下面这个链接的介绍,感谢这位网友的热情分享。http://free0007.iteye.com/blog/1687936

    展开全文
  • 1、偷懒直接贴代码,方便下次使用:/*** .Description://根据字符日期返回星期几* .Author:麦克劳林* .@Date: 2018/12/29*/public String getWeek(String dateTime){String week = "";SimpleDateFormat sdf = new ...
  • import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.quartz.CronExpression; import org.quartz....
  • 目录前言一、代码示例1、计算固定的周期2、计算多个周期 前言 项目中使用cron表达式来作为...通过下次执行时间和下下次执行时间之差计算 public class CronTest { /** * 根据cron表达式获取执行周期 */ @Test ..
  • 生成一个util类,方便下次有需要的时候使用。import java.util.Calendar;public class WeekToDateUtil {//获取这一年的日历private static Calendar getCalendarFormYear(int year){Calendar cal = Calendar....
  • Static和new的区别? static :不需要创建实例可直接使用, 会直到...本案例就用static吧,时间有限,上干货,下次介绍一下它两的区别。 public static void main(String[] args) throws Exception{ List l...
  • 前言:之前做记账app的时候,需要根据当前日期去查询当前所在的时间段,以方便统计这段时间内的支出总额,这里写一个工具类,方便下次需要的时候直接来拿,下面开始介绍:内容概述:一、Calender类的简述二、对时间...
  • 生成一个util类,方便下次有需要的时候使用。 import java.util.Calendar; public class WeekToDateUtil { //获取这一年的日历 private static Calendar getCalendarFormYear(int year){ Calendar cal =...
  • SpringBoot时间字符串参数获取

    千次阅读 2018-09-03 14:48:41
    java处理请求参数中的时间字符串问题,总是令人头疼不已,为了下次面对这个问题能够如沐春风一样的解决掉这个问题,我总结了四种处理方案,最后一种是我个人最满意的方法,迫不及待的童鞋可以直接查看第四种. 办法1 : ...
  • 但是发现手动统计中 获取两个时间之间相差的小时数的计算有点儿问题。 今天就修改了一下,记录一下,下次用的时候直接取 String st = request.getParameter("st"); //开始时间 String ed = request.getParameter...
  • 后台有定时任务在获取,但是偶尔会出现token失效,这是因为在获取的时候,定时任务正在跑,可能正在获取最新的token中,这个时候如何过一段时间(比如800毫秒之后)再请求呢?当时我听到这个题目的时候,顿时懵逼,就...
  • java商城秒杀

    2020-10-10 14:15:21
    流程 ...列表——>详情页——>秒杀 优化 html等静态资源不需要重新到服务器获取,cdn会缓存。在做倒计时时,超过时间禁用按钮...在获取地址时,先到redis查看,如果没有再到mysql获取并保存到redis,下次访问就能直
  • 在公司遇到的一个问题,本以为很小很好解决,没想到花了一下午时间。图给的是文件路径,page1下有10个文件夹,每个有的有文件夹或者文件,要求得到page1下(即:123456789,10这个10个文件夹下)没有文件夹的名字,后...
  • Java 每日抽奖

    2014-03-19 00:32:59
    思路 这个主要就是 一个时间获取 怎样判断今天抽过了 根据抽奖的时间 获取 今天的截止时间戳 (或开始世间)保存下来 下次再抽奖的时候 根据与当前时间戳比较   // 得到系统当前时间 long ...
  • java的yield

    2020-03-04 13:22:35
    如果担心占用资源过多,可以在完成某个重要的工作后使用 yield 方法让掉当前 CPU 的调度权,等下次获取到再继续执行,这样不但能完成自己的重要工作,也能给其他线程一些运行的机会,避免一个线程长时间占有 CPU ...
  • 在学习连接池原理的时候,写了个小小的连接池,在使用prepareStatement的时想到,我的连接是保存在连接池中,没有关闭,每次获取的prepareStatement中上次保存的参数是否还在?会不会影响下次的使用?实验的时间到了...
  • 【JavaP6大纲】Java基础篇:CAS,ABA,volatile特性

    多人点赞 热门讨论 2021-04-08 10:21:58
    CAS是通过无限循环来获取数据的,若果在第一轮循环中,a线程获取地址里面的值被b线程修改了,那么a线程需要自旋,到下次循环才有可能机会执行。 ABA 问题:CAS算法实现一个重要前提需要取出内存中的某时刻的数据并在...
  • 在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每 ········· 今天我们简单了解了一下为什么要用线程池,以及...
  • 1、在程序 首次启动时获取该文件的最后修改时间并且做文件的首次解析,然后每隔一段指定的时间检查一次文件最后被修改的时间,如果与记录的时间相等则等待下次 的采集,否则进行新一轮的采集并且更新时间。...
  • java的引用类型

    2018-06-08 21:19:29
    缓存数据,提高数据的获取速度弱引用每次JVM回收垃圾都会被回收用于:短时间缓存某些次要数据幽灵引用/虚引用相当于无引用,使对象无法被使用,必须配合引用队列使用应用:对象进入不可用状态,等待下次JVM垃圾回收...
  • Java 中,使用场景 我们一般对调用方法进行缓存控制,比如我调用"findUserById(intid)", 那么我应该在调用这个方法之前先从缓存中查找有没有,如果没有再调用该方法如从数据 库加载用户信息,然后添加到缓存中,再...
  • 关于java开发过程中需要获取项目路径,百度google一搜,网上多如牛毛,但这次搜出来,下次却忘记了。   网上曾经有无数java路径讲解的文章,从基础至终极篇数不胜数。。。但无论是多终极,始终不能指明自己所需要...
  • Java学习笔记17-Netty实战及优化 尝试自己实现 短连接:请求/响应之后,关闭已经建立的TCP连接,下次请求再建立一次连接。 长连接:请求/响应之后,不关闭TCP连接,多次请求,复用同一个连接。 为了避免频繁创建连接...
  • 输入框自动匹配实践(java web)

    千次阅读 2014-04-02 22:14:49
    以附件中的demo为例,这个demo是在MyEclipse8.5中实现的一个java 微博项目,整个思路是:用一个servlet监听输入框,获取输入英文字符,后台匹配,返回xml格式,前台自动解析,生成对应字符的下拉列表,实现输入框...
  • javaSwing宿舍管理系统

    2014-06-07 20:45:00
    闸机需要记录每个学生每天的出入信息,对于24小时未刷卡进入宿舍的学生记录在数据库,同时把消息提醒给管理员,管理员通过一定的整理后把消息发送给学生的辅导员,同时闸机监控这位学生的下次进入时间,把消息传递给...
  • 在遇到这个场景时,第一时间就想到了RingBuffer,但是很多Java扩展包里面的RingBuffer实现并不支持批量获取,也不支持二段ack确认删除,只能一次获取一个并从RingBuffer中删除。因此对org.apache.commons....

空空如也

空空如也

1 2 3 4
收藏数 61
精华内容 24
关键字:

java获取下次时间

java 订阅