CronUtils.java 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package com.simuwang.schedule.util;
  2. import com.simuwang.base.common.util.DateUtils;
  3. import org.quartz.CronExpression;
  4. import org.quartz.TriggerUtils;
  5. import org.quartz.impl.triggers.CronTriggerImpl;
  6. import java.text.ParseException;
  7. import java.util.ArrayList;
  8. import java.util.Date;
  9. import java.util.List;
  10. /**
  11. * cron表达式工具类
  12. *
  13. * @author ruoyi
  14. *
  15. */
  16. public class CronUtils
  17. {
  18. /**
  19. * 返回一个布尔值代表一个给定的Cron表达式的有效性
  20. *
  21. * @param cronExpression Cron表达式
  22. * @return boolean 表达式是否有效
  23. */
  24. public static boolean isValid(String cronExpression)
  25. {
  26. return CronExpression.isValidExpression(cronExpression);
  27. }
  28. /**
  29. * 返回一个字符串值,表示该消息无效Cron表达式给出有效性
  30. *
  31. * @param cronExpression Cron表达式
  32. * @return String 无效时返回表达式错误描述,如果有效返回null
  33. */
  34. public static String getInvalidMessage(String cronExpression)
  35. {
  36. try
  37. {
  38. new CronExpression(cronExpression);
  39. return null;
  40. }
  41. catch (ParseException pe)
  42. {
  43. return pe.getMessage();
  44. }
  45. }
  46. /**
  47. * 返回下一个执行时间根据给定的Cron表达式
  48. *
  49. * @param cronExpression Cron表达式
  50. * @return Date 下次Cron表达式执行时间
  51. */
  52. public static Date getNextExecution(String cronExpression)
  53. {
  54. try
  55. {
  56. CronExpression cron = new CronExpression(cronExpression);
  57. return cron.getNextValidTimeAfter(new Date(System.currentTimeMillis()));
  58. }
  59. catch (ParseException e)
  60. {
  61. throw new IllegalArgumentException(e.getMessage());
  62. }
  63. }
  64. /**
  65. * 通过表达式获取近10次的执行时间
  66. *
  67. * @param cron 表达式
  68. * @return 时间列表
  69. */
  70. public static List<String> getRecentTriggerTime(String cron)
  71. {
  72. List<String> list = new ArrayList<String>();
  73. try
  74. {
  75. CronTriggerImpl cronTriggerImpl = new CronTriggerImpl();
  76. cronTriggerImpl.setCronExpression(cron);
  77. List<Date> dates = TriggerUtils.computeFireTimes(cronTriggerImpl, null, 10);
  78. for (Date date : dates)
  79. {
  80. list.add(DateUtils.parseDateToStr(DateUtils.YYYY_MM_DD_HH_MM_SS, date));
  81. }
  82. }
  83. catch (ParseException e)
  84. {
  85. return null;
  86. }
  87. return list;
  88. }
  89. }