首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iCalendar:不带BYDAY或BYMONTHDAY的每月规则

iCalendar:不带BYDAY或BYMONTHDAY的每月规则
EN

Stack Overflow用户
提问于 2019-02-02 01:20:46
回答 2查看 551关注 0票数 0

如何解释只有DTSTART (没有BYDAY或BYMONTHDAY)的月度递归规则?

根据RFC5545,您可以定义仅具有频率的循环规则,例如

代码语言:javascript
复制
DTSTART;TZID=US-Eastern:20180831T090000
RRULE:FREQ=MONTHLY

显然,安装了LineageOG (安卓日历)的智能手机会将这一事件解释为BYMONTHDAY,只有在一个月的31日才会显示这一事件。iPhone显然将其解释为每月的最后一天,并显示每个月(31号、30号甚至28号)的事件。哪种解释是正确的?

EN

回答 2

Stack Overflow用户

发布于 2019-02-02 17:33:29

可以说iPhone是“错误的”,尽管rfc5545没有明确地解决这个问题https://icalendar.org/iCalendar-RFC-5545/3-8-5-3-recurrence-rule.html

也许他们会问:“非技术用户会期望什么?”接近?

认为苹果错了也于事无补。最好是生成一个明确的RRULE。如果只需要第31天,则使用BYMONTHDAY,或者使用BYDAY=-1表示每月的最后一天

票数 2
EN

Stack Overflow用户

发布于 2019-04-05 22:39:48

iPhone在这里肯定是错的。RFC 5545, section 3.3.10清楚地指出:

确定各种重复实例开始时间和日期所需的

信息不包含在规则中,它是从开始时间("DTSTART")组件属性派生而来的。例如,"FREQ=YEARLY;BYMONTH=1“不指定月份或时间内的特定日期。此信息将与为"DTSTART“指定的信息相同。

重复规则可能会生成具有无效日期(例如,2月30日)或不存在本地时间(例如,本地时间在凌晨1:00提前一个小时的某一天的1:30 AM)的重复实例。必须忽略此类重复实例,并且不能将其计入重复集合的一部分。

这两个加在一起意味着你的事件在每31天重现一次,但只在实际有31天的月份重现,否则实例将被忽略。

无论哪种方式,明确说明意图并在这种情况下始终提供BYMONTHDAY都是更好的做法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54484240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档