问题描述
我正在研究 https://datatracker.ietf.org/doc/html/rfc5545#section-3.8.5 和 https://datatracker.ietf.org/doc/html/rfc7529#section-4.1 ,我认为这形成了一个很好的标准,可以为日历事件生成一组静态时间戳。
为了更好地解释我的问题,我想从一个例子开始。
FREQ=DAILY;INTERVAL=2
这将从提供的 DTSTART 开始,并且该事件将在该点之后每隔一天重复一次。同理
FREQ=DAILY;INTERVAL=2;BYHOUR=10;BYMINUTE=30;BYSECOND=0
将确保这些重复发生在每隔一天的 10:30。
不过,我觉得还有一个概念,我们不是在调度事件,而是在调度任务。如果某项任务延迟完成,有时我们不希望该任务在某个静态调度的时间再次执行,而是下次应该取决于上次完成时间。
如果我们对重复频率感到满意,那么计算下一次任务到期的时间就很简单了,
lastCompletionTime + frequency
其中 lastCompletionTime 是某个时间戳对象,频率表示持续时间。
currentDueTime: 2021-07-23T07:00:00.000+10:00
lastCompletionTime: 2021-07-23T07:30:00.000+10:00 // so,this has been completed late
newDueTime: 2021-07-23T08:30:00.000+10:00
但是,让我们回到我们的频率为两天的示例。这是我希望发生的事情的示例。
currentDueTime: 2021-07-23T10:30:00.000+10:00
lastCompletionTime: 2021-07-24T15:00:00.000+10:00 // this has been completed late,over a day after it was due
newDueTime: 2021-07-26T10:30:00.000+10:00 // Now due two days after completion,but,at 10:00,so this is not calculated just by adding a 48 hour frequency
这让我觉得能够使用 RRULE 定义一组无法提前知道的时间戳会很好。或者,假设所有未来的完成都在适当的时间发生,则可以提前生成一个集合。
另一个有用的功能是限制重复的能力。例如,我可能希望活动每 40 分钟(在每个 lastCompletionTime 之后)到期,但只能在每个工作日的 09:00 和 17:00 之间到期。在此示例中,接近 17:00 的 lastCompletionTime 应在第二天的 09:00 生成新的DueTime。
问题是,是否有一个标准可以在我缺少的某个地方扩展 RRULE 概念,或者以这种方式生成时间戳的类似标准?更好的是,有什么地方可以实现吗?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)