这应该是微不足道的,但今晚我的大脑正在撞墙。
我的流程会运行一次,然后每小时偏移n
分钟。
EG,15分钟表示小时(比方说1),然后是1:15,1:30,1:45等。
如果执行间隔为15,则初始执行时间为1:07并持续到1:11,等待下一次执行将在4分钟内完成。
如果执行间隔为15,则初始执行时间为1:07并运行至1:16,等待下一次执行将为14分钟(执行时间不重叠)。
因此,在每次运行(变化的长度)之后,我们如何计算等待下一次执行的分钟数?
我没有在这里放任何示例代码,因为我没有任何可以通过我的单元测试的东西(我不是那么大脑死了,我不能写那些 !)。
我已将此标记为C#
,因为我正在编码,但我希望该解决方案与语言无关。
答案 0 :(得分:3)
好的,正如我在问题上提交时,我有一个顿悟。
鉴于currentMinute
> = 0且executionInterval
> = 1
absolute-value((currentMinute modulo executionInterval) - executionInterval)
或者,在C#中
return Math.Abs((currentMinute % executionInterval) - executionInterval);
到目前为止,我的单元测试正在传递这个。所以,要么是正确的,要么我没有足够的测试......
答案 1 :(得分:1)
转换为分钟,mod乘15,加1,乘以15,减去原始数字。
// n is time in minutes
int m = n%exec_time;
m += 1;
return m*exec_time - n;
答案 2 :(得分:1)
这可能是您想要的更强大的解决方案,但如果您希望最终用户指定间隔,您可能希望给他的不只是“指定间隔分钟:”选项。看看Cron format。它允许您指定任何类型的奇怪的复杂时间间隔。
好消息是crontab库有很多实现,其中一些是针对C#的。检查NCrontab,它有一些有用的方法,如GetNextOccurences
,它将根据间隔输入和当前时间计算日期。如果您使用它,最终可能会节省实现此功能的时间,同时使其更加丰富和有用。
答案 3 :(得分:0)
I =以分钟为单位的间隔
M = I - (至%I)