iCal(或其他?)抽象重复的格式

iCal (or other?) Formatting for Abstract Recurrence

我需要以独立于特定 date/time 概念的方式存储事件的重复模式 - 即,该模式不完全是重复出现的 "event"在指定的 window 内发生。具体来说,要回答以下问题:企业何时营业,或何时可以向该企业交货。

例如:每个星期一、星期三和星期四,从 10:00 到 12:00,还有星期三,从 2:00 到 4:00.

过去,我创建了数据库表,其结构专门用于存储此类数据——即定义这些 "time windows" 的表,对于每种类型的 window,每个机构有多行需要说明。然而,我想摆脱这种方法,转而采用更现代的方法——一种可解析的格式,iCal 似乎是最有可能的候选者。但是,如果有更好的选择,我想要其他建议。

我研究了如何表达 iCal 重复模式的具体细节,必须说虽然我掌握了基本原理,但我还不太明白如何真正格式化单个 iCal "event" 对于我在上面发布的示例,即:没有特定的 start/end 日期,没有指定的出现次数等。

我希望得到一些关于这方面的指导,并希望看到一个具体的例子,如果有人可以为我制定它的话。我的平台一般是.NET/C#, MSSQL, Outlook/Exchange.

对于您的具体示例,您可能会考虑对开始时间使用 CRON 表达式语法,然后包含一个持续时间字段。 CRON 对于重复模式非常强大,但您可能还需要一些方法来排除日期(例如假期)。我在最近的项目中一直在使用 ncrontab,它非常适合解析和确定出现次数。

https://github.com/atifaziz/NCrontab

您仍然可能处于根据需要构建自定义数据库结构的情况,但您可以考虑的一种选择是在数据库中添加一列并存储序列化的 JSON 字符串而不是多个单独的表。 SQL Server 2016/Azure SQL 也可以本地查询 JSON。

有一个描述这些 windows 的新 iCalendar 扩展名为 VAVAILABILITY:

https://www.rfc-editor.org/rfc/rfc7953