精华内容
下载资源
问答
  • Java 获取cron表达式的下次执行时间

    千次阅读 2021-02-01 19:41:50
    对于非绝对时间的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());

     

    展开全文
  • java获取当前时间的下一天以及30天后的时间 背景:最近在写一个项目时,有这样的一个需求。需要得到当前时间的下一天以及30后的时间。在计算30天后的时间时出现了一点问题,时间出错,但是感觉自己的公式没有出错,...

     

    背景:最近在写一个项目时,有这样的一个需求。需要得到当前时间的下一天以及30后的时间。在计算30天后的时间时出现了一点问题,时间出错,但是感觉自己的公式没有出错,后来才发现是运算超出了Integer的范围。

    (  24 * 60 * 60*1000) 这种计算表达式在 Java中是默认以 Integer类型来的,若不超过 Integer的最大值则没有问题,若超过则必须加上L (  24 * 60 * 60*1000L) 

    当然为了避免出现此类问题,也可以采用最粗暴的方法,就是不管 表达式的计算结果是否超过了 Integer的最大值,都用 L来标识 是个 Long类型,这样绝对不会出错。若是一眼就能计算出来的

    可以不用加L,比如:(8 * 24 * 32) 基本肯定不会超过 Integer的最大值不用加L也行,若是一眼计算不出来感觉很大的如:(180 * 24 * 500 * 24) 这种一眼计算不出来,且感觉会超过 Integer的最大值的

    需要加L来标识 计算出来的结果是一个Long类型,以防止溢出Bug.

    import java.util.Date;
    public class Test {
        public static void main(String[] args) {
            //获取当前时间的下一天的时间
            Date date1=new Date(System.currentTimeMillis()+24*60*60*1000);
            System.out.println(date1);
    
            //获取当前时间的30天后的时间
            /*
                如果运算中不加L的话会出错
                Date date30=new Date(System.currentTimeMillis()+24*60*60*1000*30);
                
            */
    
            Date date30=new Date(System.currentTimeMillis()+24*60*60*1000*30L);
            System.out.println(date30);
        }
    }
    

     

    展开全文
  • 在本文里,我会给大家介绍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

    展开全文
  • 有两种方法:方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码:import java.util.*;import java.text.*;//以下默认时间日期显示方式都是汉语语言方式//一般语言就...

    有两种方法:

    方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码:

    import java.util.*;

    import java.text.*;

    //以下默认时间日期显示方式都是汉语语言方式

    //一般语言就默认汉语就可以了,时间日期的格式默认为MEDIUM风格,比如:2008-6-16 20:54:53

    //以下显示的日期时间都是再Date类的基础上的来的,还可以利用Calendar类来实现见类TestDate2.java

    public class TestDate {

    public static void main(String[] args) {

    Date now = new Date();

    Calendar cal = Calendar.getInstance();

    DateFormat d1 = DateFormat.getDateInstance(); //默认语言(汉语)下的默认风格(MEDIUM风格,比如:2008-6-16 20:54:53)

    String str1 = d1.format(now);

    DateFormat d2 = DateFormat.getDateTimeInstance();

    String str2 = d2.format(now);

    DateFormat d3 = DateFormat.getTimeInstance();

    String str3 = d3.format(now);

    DateFormat d4 = DateFormat.getInstance(); //使用SHORT风格显示日期和时间

    String str4 = d4.format(now);

    DateFormat d5 = DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL); //显示日期,周,时间(精确到秒)

    String str5 = d5.format(now);

    DateFormat d6 = DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG); //显示日期。时间(精确到秒)

    String str6 = d6.format(now);

    DateFormat d7 = DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT); //显示日期,时间(精确到分)

    String str7 = d7.format(now);

    DateFormat d8 = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM); //显示日期,时间(精确到分)

    String str8 = d8.format(now);//与SHORT风格相比,这种方式最好用

    System.out.println("用Date方式显示时间: " + now);//此方法显示的结果和Calendar.getInstance().getTime()一样

    System.out.println("用DateFormat.getDateInstance()格式化时间后为:" + str1);

    System.out.println("用DateFormat.getDateTimeInstance()格式化时间后为:" + str2);

    System.out.println("用DateFormat.getTimeInstance()格式化时间后为:" + str3);

    System.out.println("用DateFormat.getInstance()格式化时间后为:" + str4);

    System.out.println("用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为:" + str5);

    System.out.println("用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为:" + str6);

    System.out.println("用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后为:" + str7);

    System.out.println("用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间后为:" + str8);

    }

    }

    运行结果:

    用Date方式显示时间: Mon Jun 16 20:54:53 CST 2008

    用DateFormat.getDateInstance()格式化时间后为:2008-6-16

    用DateFormat.getDateTimeInstance()格式化时间后为:2008-6-16 20:54:53

    用DateFormat.getTimeInstance()格式化时间后为:20:54:53

    用DateFormat.getInstance()格式化时间后为:08-6-16 下午8:54

    用DateFormat.getDateTimeInstance(DateFormat.FULL,DateFormat.FULL)格式化时间后为

    :2008年6月16日 星期一 下午08时54分53秒 CST

    用DateFormat.getDateTimeInstance(DateFormat.LONG,DateFormat.LONG)格式化时间后为

    :2008年6月16日 下午08时54分53秒

    用DateFormat.getDateTimeInstance(DateFormat.SHORT,DateFormat.SHORT)格式化时间后

    为:08-6-16 下午8:54

    用DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM)格式化时间

    后为:2008-6-16 20:54:53

    方法二:用java.util.Calendar类来实现,看下面:

    import java.util.*;

    import java.text.*;

    //以下是利用Calendar类来实现日期时间的,和Date类相比较比较简单

    public class TestDate2 {

    public static void main(String[] args) {

    Calendar ca = Calendar.getInstance();

    int year = ca.get(Calendar.YEAR);//获取年份

    int month=ca.get(Calendar.MONTH);//获取月份

    int day=ca.get(Calendar.DATE);//获取日

    int minute=ca.get(Calendar.MINUTE);//分

    int hour=ca.get(Calendar.HOUR);//小时

    int second=ca.get(Calendar.SECOND);//秒

    int WeekOfYear = ca.get(Calendar.DAY_OF_WEEK);

    System.out.println("用Calendar.getInstance().getTime()方式显示时间: " + ca.getTime());

    System.out.println("用Calendar获得日期是:" + year +"年"+ month +"月"+ day + "日");

    System.out.println("用Calendar获得时间是:" + hour +"时"+ minute +"分"+ second +"秒");

    System.out.println(WeekOfYear);//显示今天是一周的第几天(我做的这个例子正好是周二,故结果显示2,如果你再周6运行,那么显示6)

    }

    }

    运行结果是:

    用Calendar.getInstance().getTime()方式显示时间: Mon Jun 16 21:54:21 CST 2008

    用Calendar获得日期是:2008年5月16日

    用Calendar获得时间是:9时54分21秒

    2

    总结:中的来说,方法二是最方便的,方法一显得分笨拙,不过看个人喜欢了。

    还有一种方法利用System.currentTimeMillis()也可以的,下次再总结这种方法。

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

    万次阅读 2016-12-06 16:07:05
    1. java 7 及之前版本 1.1 使用 java.util.Calendar (不推荐) import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class Demo { ...
  • 项目开发中遇到一个需求,根据cron表达式获取下一次执行时间,网上搜了下资料很多,选了一种,亲测可行。 private Date getNextTriggerTime(String cron){ if(cron == null || !CronExpression.isValidExpression...
  • 我实际上并没有使用Quartz安排工作 .CronTrigger中有一个名为getFireTimeAfter(Date)的方法,它给出下一次作业将在给定日期之后触发的时间 . 当提供的日期现在或将来时,这很有效 . 但如果日期已经过去,它似乎不起...
  • java获取两个时间格式相差多少分钟

    万次阅读 2018-11-06 14:05:14
    昨天碰到一个需求,其中有一点是要从数据库里获得时间数据,然后跟当前时间比较,求得相差了多少分钟。其中比较坑的地方就是这个数据库里的时间格式是: HH:mm,当时有点被水淹没,不知所措。然后就理了一下思路,有...
  • import java.time.LocalDateTime; import java.time.ZonedDateTime; import java.util.Optional; import static com.cronutils.model.CronType.QUARTZ; /** * @author 向振华 * @date 2021/09/13 09:33 */ public ...
  • log.info("===[任务名称]:" + jobName + "[下次执行时间]:" + sdf.format(nextFireTime)); /**STATE_BLOCKED 4 阻塞 STATE_COMPLETE 2 完成 TATE_ERROR 3 错误 STATE_NONE -1 不存在 STATE_NORMAL 0 正常 STATE_...
  • 摘要:Java 解析Cron表达式,获取最近运行时间方法一packagecom.odj.customer.index.controller;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.ArrayList;importjava.util....
  • 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; impo...
  • 目录 一、前言 二、引入maven依赖 ...在开发中,需要检验cron表达式的合法性以及获取执行时间。在CronUtil中实现了这些功能。 二、引入maven依赖 <dependency> <groupId>com.cronuti
  • quartz获取定时任务下次执行的时间

    千次阅读 2018-09-02 15:53:00
    这个cronExpression很多技术人员都要配置,但很多情况,我们要知道这个cronExpression下次执行的时间是啥,让非技术人员很直观的看到下一个定时任务的执行时间。  其实quartz已经提供了相关工具类。示例代码如下: ...
  • JAVA 实现NTP Client,获取NTP Server时间

    千次阅读 2020-05-15 20:20:58
    NTP NTP(Network Time Protocol)一般指网络时间协议,是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源做同步化,它可以提供高精准度的时间校正,NTP的目的是在无序的Internet环境中提供...
  • 当读取一个大文件时,一时半会儿无法看到读取结果,就需要显示一个进度条,是程序员明白已经读了多少文件,可以估算读取还需要多少时间,下面的代码可以实现这个功能
  • 关于Docker部署java应用时间和系统时间不匹配的问题! 服务器和Docker容器中的系统时间正常,但java应用中获取时间相差了8小时,导致数据库存储的时间也差了8小时。
  • import org.springframework.scheduling.support.CronSequenceGenerator; Date date = new Date(); CronSequenceGenerator cronSequenceGenerator = new CronSequenceGenerator("0 ...//下次执行时间 Date time2 = c.
  • 升级版DateUtil.java 得到几天后的date,根据农历生日计算出年龄,判断当前时间是否在[startTime, endTime]区间,注意时间格式要一致
  • 目录前言一、代码示例1、计算固定的周期2、计算多个周期 前言 项目中使用cron表达式来作为...通过下次执行时间和下下次执行时间之差计算 public class CronTest { /** * 根据cron表达式获取执行周期 */ @Test ..
  • 动态修改定时器的下次执行时间 一. 启动类中添加开启定时器注解@EnableScheduling @SpringBootApplication @EnableScheduling public class AdminServer { public static void main(String[] args) { ...
  • java获取时间

    2013-09-21 23:43:03
    方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import java.text.*; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就默认汉语就...
  • java实现带过期时间的缓存

    千次阅读 2020-12-19 04:47:32
    我们考虑到在应用层使用缓存,将配置信息在应用层缓存起来,每隔一分钟自动清空一下缓存,清空缓存之后,下次请求就会访问redis,获取最新的配置信息。当然这之间配置信息可能已经更改,更改之后到应用最近一次从...
  • 但是发现手动统计中 获取两个时间之间相差的小时数的计算有点儿问题。 今天就修改了一下,记录一下,下次用的时候直接取 String st = request.getParameter("st"); //开始时间 String ed = request.getParameter...
  • Spring提供了CronSequenceGenerator类以便计算cron表达式的具体时间点的next方法(Spring3.2版本)和cron是否合法的isValidExpression方法(Spring4.3版本)。 代码如下: import java.text.SimpleDateFormat; ...
  • java如何获取sessionid

    千次阅读 2021-02-12 13:26:41
    在计算机专业术语中,Session是指一个终端用户与交互系统进行通信的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。以及如果需要的话,可能还有一定的操作空间。 具体到Web中的Session指的就是用户...
  • JAVA获取当前时间

    2012-06-25 14:49:55
    方法一:用java.util.Date类来实现,并结合java.text.DateFormat类来实现时间的格式化,看下面代码: import java.util.*; import java.text.*; //以下默认时间日期显示方式都是汉语语言方式 //一般语言就...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,659
精华内容 35,063
关键字:

java获取下次时间

java 订阅