我正在开发一个允许用户输入遵循类似于cron格式的任务的项目。目前,我需要能够确定下次运行任务的时间,并获得该时间之前的秒数。以下是使用格式和预期结果的几个示例。
Format: (second) (minute) (hour) (day) (month)
0-59 0-59 0-23 1-31 1-12
(##): States the exact value for the parameter
(*): Accepts all values (effectively ignores the parameter)
Step Modifier (/##): Considers all whole number multiples of ##
30 * * * * -> Runs a task every minute when second = 30
0 /5 * * * -> Runs a task every 5 minutes (at 0, 5, 10, etc.) when second = 0
13 /15 /2 * * -> Runs a task every 15 minutes when seconds = 13 and hour is even
以下是我需要做的几个解析这个问题的例子。
Example time: July 6th, 5:34:12 (24 hour)
In modified format: 12 34 5 6 7
30 * * * * -> returns 18 (next task runs at 5:34:30)
0 /5 * * * -> returns 48 (next task runs at 5:35:00)
13 /15 /2 * * -> returns 1561 (next task runs at 6:00:13)
我尝试了一系列不同的方法,甚至把它带给了我的导师和其他学生,但是没有人能够设计出一个解决方案。编程很容易,但它是逃避我的逻辑。如果有人可以提出建议,我将非常感激。
我唯一想要使用的库是java.util.Calendar
,只需获取当前时间,然后使用Calendar.getInstance().SECONDS
或其他时间单位。
答案 0 :(得分:0)
简单策略:
0 0 /6 1 *
变为0 0 0,5,11,17,23 1 1,2,3,4,5,6,7,8,9,10,11,12
。