CommonUtils.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. package com.xcgl.utils;
  2. import java.text.ParseException;
  3. import java.util.ArrayList;
  4. import java.util.Calendar;
  5. import java.util.Date;
  6. import java.util.List;
  7. import org.jeecgframework.core.util.DateUtils;
  8. import org.quartz.CronExpression;
  9. public class CommonUtils {
  10. /**
  11. * 解析corn表达式,生成具体时间
  12. *
  13. * @param cronExpression cron表达式
  14. * @param advanceQuantity (消息)提前计算量
  15. * @param advanceType (消息)提前计算时间
  16. * @return 今日在消息提前时间 - 解析日期内的具体解析时间
  17. * @throws ParseException
  18. */
  19. public static List<String> CronParser(String cronExpression, int advanceQuantity, String advanceType ,int quantity) throws ParseException
  20. {
  21. List<String> result = new ArrayList<String>();
  22. if (cronExpression == null || cronExpression.length() < 1 || advanceType == null || advanceType.length() < 1)
  23. {
  24. return result;
  25. }
  26. else
  27. {
  28. CronExpression exp = null;
  29. // 初始化cron表达式解析器
  30. try
  31. {
  32. exp = new CronExpression(cronExpression);
  33. }
  34. catch (ParseException e)
  35. {
  36. e.printStackTrace();
  37. return result;
  38. }
  39. // 定义生成时间范围
  40. // 定义开始时间,前一天的23点59分59秒
  41. Calendar c = Calendar.getInstance();
  42. Date dStart = null;
  43. Date dEnd = null;
  44. dStart = DateUtils.datetimeFormat.parse(DateUtils.formatDate() + " 00:00:00");
  45. //计划完成时间为n天之后的工作也要生成
  46. if(advanceType.equals("day")) {
  47. c.setTime(dStart);
  48. c.add(Calendar.SECOND, -1);
  49. dStart = c.getTime();
  50. c.add(Calendar.SECOND, 1);
  51. c.add(Calendar.DATE, advanceQuantity);
  52. dEnd = c.getTime();
  53. // 定义结束时间,n天后的23点59分59秒
  54. dEnd = DateUtils.datetimeFormat.parse(DateUtils.formatDate(dEnd) + " 23:59:59");
  55. }else {
  56. // 定义结束时间,当天的23点59分59秒
  57. dEnd = DateUtils.datetimeFormat.parse(DateUtils.formatDate() + " 23:59:59");
  58. }
  59. // 生成时间序列
  60. java.util.Date dd = dStart;
  61. dd = exp.getNextValidTimeAfter(dd);
  62. int i = 0;
  63. while ((dd.getTime() >= dStart.getTime()) && (dd.getTime() <= dEnd.getTime()))
  64. {
  65. if(i == quantity)
  66. break;
  67. result.add(DateUtils.datetimeFormat.format(dd));
  68. dd = exp.getNextValidTimeAfter(dd);
  69. i++;
  70. }
  71. }
  72. return result;
  73. }
  74. /**
  75. * 把cron转译成中文描述
  76. * */
  77. public static String translateToChinese(String cronExp)
  78. {
  79. if (cronExp == null || cronExp.length() < 1)
  80. {
  81. return "cron表达式为空";
  82. }
  83. CronExpression exp = null;
  84. // 初始化cron表达式解析器
  85. try
  86. {
  87. exp = new CronExpression(cronExp);
  88. }
  89. catch (ParseException e)
  90. {
  91. return "corn表达式不正确";
  92. }
  93. String[] tmpCorns = cronExp.split(" ");
  94. StringBuffer sBuffer = new StringBuffer();
  95. if(tmpCorns.length == 6)
  96. {
  97. //解析月
  98. if(!tmpCorns[4].equals("*"))
  99. {
  100. sBuffer.append(tmpCorns[4]).append("月");
  101. }
  102. else
  103. {
  104. sBuffer.append("每月");
  105. }
  106. //解析周
  107. if(!tmpCorns[5].equals("*") && !tmpCorns[5].equals("?"))
  108. {
  109. char[] tmpArray = tmpCorns[5].toCharArray();
  110. for(char tmp:tmpArray)
  111. {
  112. switch (tmp)
  113. {
  114. case '1':
  115. sBuffer.append("星期天");
  116. break;
  117. case '2':
  118. sBuffer.append("星期一");
  119. break;
  120. case '3':
  121. sBuffer.append("星期二");
  122. break;
  123. case '4':
  124. sBuffer.append("星期三");
  125. break;
  126. case '5':
  127. sBuffer.append("星期四");
  128. break;
  129. case '6':
  130. sBuffer.append("星期五");
  131. break;
  132. case '7':
  133. sBuffer.append("星期六");
  134. break;
  135. case '-':
  136. sBuffer.append("至");
  137. break;
  138. default:
  139. sBuffer.append(tmp);
  140. break;
  141. }
  142. }
  143. }
  144. //解析日
  145. if(!tmpCorns[3].equals("?"))
  146. {
  147. if(!tmpCorns[3].equals("*"))
  148. {
  149. sBuffer.append(tmpCorns[3]).append("日");
  150. }
  151. else
  152. {
  153. sBuffer.append("每日");
  154. }
  155. }
  156. //解析时
  157. if(!tmpCorns[2].equals("*"))
  158. {
  159. sBuffer.append(tmpCorns[2]).append("时");
  160. }
  161. else
  162. {
  163. sBuffer.append("每时");
  164. }
  165. //解析分
  166. if(!tmpCorns[1].equals("*"))
  167. {
  168. sBuffer.append(tmpCorns[1]).append("分");
  169. }
  170. else
  171. {
  172. sBuffer.append("每分");
  173. }
  174. //解析秒
  175. if(!tmpCorns[0].equals("*"))
  176. {
  177. sBuffer.append(tmpCorns[0]).append("秒");
  178. }
  179. else
  180. {
  181. sBuffer.append("每秒");
  182. }
  183. }
  184. return sBuffer.toString();
  185. }
  186. }