java把日期转化为cron表达式

本文介绍了一种将Java中的具体日期转换为Cron表达式的方法,并提供了实用的代码示例。通过自定义的Java工具类,可以方便地实现这一转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 中,如何把日期(时间点,不是时间段)转化为cron表达式呢?

我觉得这个功能是很常用的,结果在网上竟然没有找到,真实奇怪了?!

直接给代码:

 

Java代码   收藏代码
  1. /*** 
  2.      *  
  3.      * @param date 
  4.      * @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss 
  5.      * @return 
  6.      */  
  7.     public static String formatDateByPattern(Date date,String dateFormat){  
  8.         SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);  
  9.         String formatTimeStr = null;  
  10.         if (date != null) {  
  11.             formatTimeStr = sdf.format(date);  
  12.         }  
  13.         return formatTimeStr;  
  14.     }  
  15. /*** 
  16.      * convert Date to cron ,eg.  "0 06 10 15 1 ? 2014" 
  17.      * @param date  : 时间点 
  18.      * @return 
  19.      */  
  20.     public static String getCron(java.util.Date  date){  
  21.         String dateFormat="ss mm HH dd MM ? yyyy";  
  22.         return formatDateByPattern(date, dateFormat);  
  23.     }  

 测试:

 

 

Java代码   收藏代码
  1. @Test  
  2.     public void test_getCron(){  
  3.         String cron=TimeHWUtil.getCron(new Date());  
  4.         System.out.println(cron);  
  5.     }  

 运行结果:

 

 

关于cron,请参阅:http://www.quartz-scheduler.org/documentation/quartz-2.2.x/tutorials/crontrigger

Format

A cron expression is a string comprised of 6 or 7 fields separated by white space. Fields can contain any of the allowed values, along with various combinations of the allowed special characters for that field. The fields are as follows:

Field Name Mandatory Allowed Values Allowed Special Characters
SecondsYES0-59, - * /
MinutesYES0-59, - * /
HoursYES0-23, - * /
Day of monthYES1-31, - * ? / L W
MonthYES1-12 or JAN-DEC, - * /
Day of weekYES1-7 or SUN-SAT, - * ? / L #
YearNOempty, 1970-2099, - * /

So cron expressions can be as simple as this: * * * * ? *

or more complex, like this: 0/5 14,18,3-39,52 * ? JAN,MAR,SEP MON-FRI 2002-2010

 

Examples

Here are some full examples:

**Expression****Meaning**
0 0 12 * * ?Fire at 12pm (noon) every day
0 15 10 ? * *Fire at 10:15am every day
0 15 10 * * ?Fire at 10:15am every day
0 15 10 * * ? *Fire at 10:15am every day
0 15 10 * * ? 2005Fire at 10:15am every day during the year 2005
0 * 14 * * ?Fire every minute starting at 2pm and ending at 2:59pm, every day
0 0/5 14 * * ?Fire every 5 minutes starting at 2pm and ending at 2:55pm, every day
0 0/5 14,18 * * ?Fire every 5 minutes starting at 2pm and ending at 2:55pm, AND fire every 5 minutes starting at 6pm and ending at 6:55pm, every day
0 0-5 14 * * ?Fire every minute starting at 2pm and ending at 2:05pm, every day
0 10,44 14 ? 3 WEDFire at 2:10pm and at 2:44pm every Wednesday in the month of March.
0 15 10 ? * MON-FRIFire at 10:15am every Monday, Tuesday, Wednesday, Thursday and Friday
0 15 10 15 * ?Fire at 10:15am on the 15th day of every month
0 15 10 L * ?Fire at 10:15am on the last day of every month
0 15 10 L-2 * ?Fire at 10:15am on the 2nd-to-last last day of every month
0 15 10 ? * 6LFire at 10:15am on the last Friday of every month
0 15 10 ? * 6LFire at 10:15am on the last Friday of every month
0 15 10 ? * 6L 2002-2005Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005
0 15 10 ? * 6#3Fire at 10:15am on the third Friday of every month
0 0 12 1/5 * ?Fire at 12pm (noon) every 5 days every month, starting on the first day of the month.
0 11 11 11 11 ?Fire every November 11th at 11:11am.
Pay attention to the effects of '?' and '*' in the day-of-week and day-of-month fields!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值