java 根据日期计算 cron表达式_java把日期转化为cron表达式

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

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

直接给代码:

/***

*

* @param date

* @param dateFormat : e.g:yyyy-MM-dd HH:mm:ss

* @return

*/

public static String formatDateByPattern(Date date,String dateFormat){

SimpleDateFormat sdf = new SimpleDateFormat(dateFormat);

String formatTimeStr = null;

if (date != null) {

formatTimeStr = sdf.format(date);

}

return formatTimeStr;

}

/***

* convert Date to cron ,eg. "0 06 10 15 1 ? 2014"

* @param date : 时间点

* @return

*/

public static String getCron(java.util.Date date){

String dateFormat="ss mm HH dd MM ? yyyy";

return formatDateByPattern(date, dateFormat);

}

测试:

@Test

public void test_getCron(){

String cron=TimeHWUtil.getCron(new Date());

System.out.println(cron);

}

运行结果:

0818b9ca8b590ca3270a3433284dd417.png

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

Seconds

YES

0-59

, - * /

Minutes

YES

0-59

, - * /

Hours

YES

0-23

, - * /

Day of month

YES

1-31

, - * ? / L W

Month

YES

1-12 or JAN-DEC

, - * /

Day of week

YES

1-7 or SUN-SAT

, - * ? / L #

Year

NO

empty, 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 * * ? 2005

Fire 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 WED

Fire at 2:10pm and at 2:44pm every Wednesday in the month of March.

0 15 10 ? * MON-FRI

Fire 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 ? * 6L

Fire at 10:15am on the last Friday of every month

0 15 10 ? * 6L

Fire at 10:15am on the last Friday of every month

0 15 10 ? * 6L 2002-2005

Fire at 10:15am on every last friday of every month during the years 2002, 2003, 2004 and 2005

0 15 10 ? * 6#3

Fire 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!

TimeHWUtil 源代码如下

package com.time.util;

import com.common.bean.TimeLong;

import com.common.util.ReflectHWUtils;

import com.common.util.SystemHWUtil;

import com.string.widget.util.ValueWidget;

import java.sql.Timestamp;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Calendar;

import java.util.Date;

import java.util.List;

import java.util.Locale;

import java.util.regex.Pattern;

/***

* http://hw1287789687.iteye.com/blog/2225264

* @author huangweii

* 2015年7月26日

*/

public class TimeHWUtil {

/***

* yyyy-MM-dd HH:mm:ss

*/

public static final String yyyyMMddHHmmss = "yyyy-MM-dd HH:mm:ss";

public static final String YYYYMMDDHHMM = "yyyy-MM-dd HH:mm";

public static final String YYYYMMDDHHMM_ZH = "yyyy年MM月dd HH点mm分";

public static final String YYYYMMDDHHMMSS_ZH="yyyy年MM月dd日 HH点mm分ss秒";

public static final String yyyyMMdd = "yyyy-MM-dd";

/***

* 没有中划线

*/

public static final String YYYYMMDD_NO_LINE = "yyyyMMdd";

public static final String YYYYMMDD_WITH_DOT = "yyyy.MM.dd";

private TimeHWUtil() {

throw new Error("Don't let anyone instantiate this class.");

}

/***

* yyyy-MM-dd HH:mm:ss

*

* @param timestamp

* @return

*/

public static String formatDateTime(Timestamp timestamp) {// format date

// ,such as

SimpleDateFormat sdf = new SimpleDateFormat(yyyyMMddHHmmss);

String formatTimeStr = null;

if(ValueWidget.isNullOrEmpty(timestamp)){

/* 如果没有传参数timestamp,则默认为当前时间*/

timestamp=new Timestamp(new Date().getTime());

}

if (timestamp != null) {

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的问题,我可以给出一个参考答案: Java中可以使用Quartz Cron表达式生成器来生成Cron表达式。下面是一个示例代码: ```java import org.quartz.CronExpression; public class CronExpressionGenerator { public static void main(String[] args) { // 根据秒生成cron表达式,这里以每分钟的第30秒为例 String cronExpression = generateCronExpression("30 * * * * ?"); System.out.println(cronExpression); // 输出:0 0/1 * 1/1 * ? * } /** * 根据给定的时间表达式生成Cron表达式 * @param timeExpression 时间表达式,格式为 "ss mm HH dd MM ? yyyy" * @return Cron表达式 */ public static String generateCronExpression(String timeExpression) { // 将时间表达式转换为CronExpression对象 CronExpression cronExpression = null; try { cronExpression = new CronExpression(timeExpression); } catch (Exception e) { e.printStackTrace(); } // 根据CronExpression对象生成Cron表达式 return cronExpression == null ? null : cronExpression.getCronExpression(); } } ``` 代码中使用了Quartz框架中的CronExpression类来将时间表达式转换为Cron表达式。需要注意的是,时间表达式的格式为 "ss mm HH dd MM ? yyyy",其中ss表示秒,mm表示分,HH表示小时,dd表示天,MM表示月,yyyy表示年。而Cron表达式的格式为 "秒 分 时 日 月 周年",其中周年可以省略。 以上代码只是一个简单示例,您可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值