关于 cron 日期 和星期 互排斥

关于cronExpression网上可以搜到一大堆官方文档及其翻译,大部分都是出自同一篇转文,翻译的部分充满了错误和语病,尤其是关于问号(?)的解释部分,实在是没法看。还是自己研究一下吧。

官方文档上提到问号时是这样说的:

The ‘?‘ character is allowed for the day-of-month and day-of-week fields. It is used to specify ‘no specific value‘. This is useful when you need to specify something in one of the two fileds, but not the other. See the examples below for clarification.

大致意思是说:

问号(?)可以用在日期或星期字段,用来指明‘没有特定的值’,当你为这两个字段中的一个设定值的时候就会用到它。下面的例子中说明了这一点。

可是,在后面的例子中并没有明确说明这个问号到底起什么作用,于是我编程试验了一下,得出以下结论:

1、如官方文档解释的那样,问号(?)的作用是指明该字段‘没有特定的值’;

2、星号(*)和其它值,比如数字,都是给该字段指明特定的值,只不过用星号(*)代表所有可能值;

3、cronExpression对日期和星期字段的处理规则是它们必须互斥,即只能且必须有一个字段有特定的值,另一个字段必须是‘没有特定的值’;

4、问号(?)就是用来对日期和星期字段做互斥的。

基于以上结论就可以解释下列情况:

1、当星期和日期都为*或数字时,报错
Support for specifying both a day-of-week AND a day-of-month parameter is not implemented.

即两个字段不能都指明的特定的值,必须互斥。这里的*和数字是一样的,如果都指明特定的数字,也是报一样的错。

2、当星期和日期都为?时,报错
‘?‘ can only be specfied for Day-of-Month -OR- Day-of-Week.

即两个字段不能都‘没有特定的值’。

这个是Spring的实现,没有什么道理,Spring就是规定这两个字段必须这样互斥的设置。

这与UNIX的crontab设置不一样,crontab的规则是日期和星期中只要满足一个就触发,所以不存在互斥的问题。

时间: 2024-10-11 23:05:19

关于 cron 日期 和星期 互排斥的相关文章

输入一个日期,输出该日期是星期几

假定输入日期合法正确. 先找一个参考日期,找星期天的日期为最好.我一时没想到就选了今天,星期一,也不错.然后求出输入日期与参考日期之间间隔的天数n,n为负时则表示输入日期在参考日期之前,n为正时则表示输入日期在参考日期之后.因为星期为循环星期1到星期天,又根据补码的原理,可知n = ((n % 7) +  8) % 7, 此时的n为几则是星期几.(PS:星期天用0来表示,因为我选的是参考日期是星期一所以是+8,如果选的是星期天则是+7). 1 //给定一个日期,求这个日期是星期几? 2 #inc

MSSQL 获取指定日期所在星期的第一天和最后一天日期 获取指定日期坐在月的第一天和最后一天

ufn_GetWeekFirstAndEndDay    获取指定日期所在星期的第一天和最后一天日期 ALTER FUNCTION [dbo].[ufn_GetWeekFirstAndEndDay](@tmpDate DATETIME)RETURNS  @tmpTable TABLE(            FirstDay DATETIME ,          EndDay DATETIME   )ASBEGIN    INSERT INTO @tmpTable    SELECT a.Fi

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期

根据日期字符串获取星期几,日期获取星期,时间获取星期,js获取星期 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>. 蕃薯耀 2016年12月30日 08:47:38 星期五 http://www.cnblogs.com/fanshuyao/ /** * 根据日期字符串获取星期几 *

PHP日期转星期(英文/数字)

<?php $date="2014-06-24"; $datearr=explode("-",$date); $year=$datearr[0]; $month=sprintf('%02d',$datearr[1]); $day=sprintf('%02d',$datearr[2]); $hour=$minute=$second=0; $dayofweek=getdate(mktime($hour,$minute,$second,$month,$day,$ye

java 日期和字符串互转,依据当天整天时间 得到当天最后一秒的日期时间

java 日期和字符串互转.依据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 依据当天整天时间 * 得到当天最后一秒 * 数据库查询时非常有意义 起始天 到结速天 比方按天查询 2014-06-17 00:00:00

转- 关于时间,日期,星期,月份的算法(Java中Calendar的使用方法)

package cn.outofmemory.codes.Date; import java.util.Calendar; import java.util.Date; public class CalendarDemo { public static void main(String[] args) { Calendar calendar=Calendar.getInstance(); calendar.setTime(new Date()); System.out.println("现在时间

java 日期和字符串互转,根据当天整天时间 得到当天最后一秒的日期时间

java 日期和字符串互转,根据当天整天时间   得到当天最后一秒的日期时间 package com.hi; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 根据当天整天时间 * 得到当天最后一秒 * 数据库查询时很有意义 起始天 到结速天 比如按天查询 2014-06-17 00:00:00

将指定日期转换为星期

如题,将传入的日期转换为星期几,转换方法: public String getWeekDay(Calendar calendar) { String[] weeks = {"星期日","星期一","星期二","星期三","星期四","星期五","星期六"}; int m = calendar.get(Calendar.DAY_OF_WEEK)-1; if(m<0

Swift根据日期字符串返回日期是星期几

最近在做的一个IOS项目中需要根据日期得出日期代表的是星期几,日期以字符串的形式获得,于是该方法可以简单描述如下: /* * 根据日期格式字符串返回日期代表星期几 * 参数:dateTime,字符串类型,日期格式字符串,格式为"yyyy-MM-dd HH:mm:ss" * 返回值:日期代表星期几,Int类型,星期一到星期日分别表示为:1-7 */ func getWeekDay(dateTime:String) ->Int 简单百度了一下,又大致浏览了一下官方API文档,得知NS