【发布时间】:2023-04-09 03:17:01
【问题描述】:
不到 24 小时的 RFC 5545 持续时间在跨越夏令时 (DST) 转换时应如何处理?
例如,假设 DST 在特定日期的凌晨 2:00 结束,并假设事件在当天的第二个凌晨 1:10 开始。 (第一个凌晨 1:10 是夏令时的一个真实小时,第二个凌晨 1:10 是标准时间)。
如果该事件有一个-PT15M(15 分钟前)持续时间提醒,那么该提醒应该在事件开始前多少分钟弹出?它应该在凌晨 1:55(夏令时)提前 15 分钟弹出现实世界吗?还是应该提前 75 分钟在夏令时上午 12:55 弹出真实世界?
规范似乎暗示了后一种行为,但这种行为对我来说似乎违反直觉。如果我想要提前 15 分钟提醒,我的意思是“15 分钟”。然而,对于较长的提醒,它 很直观,例如-P1D 应在该活动开始前 25 小时,以便您在前一天的同一当地时间收到提醒。
无论如何,大多数日历应用程序如何处理这种不直观的行为?他们是否忽略规范并始终将小于 24 小时的提醒视为准确而不针对 DST 进行调整?还是我对规范的理解有误,-P1D 的情况会不直观,因为一天提醒会在不同的当地时间显示为活动开始时间?
显然,这在某种程度上是一个极端情况,因为很少有会议在半夜开始。但是在某些情况下可能会发生这种情况,例如深夜社交活动。如果我保证 2 小时后在酒吧见你,我可能不是指某些晚上 1 小时或 3 小时!
RFC 5545 规范是这样说的:
在时间尺度不连续的情况下,例如从标准时间到白天时间的变化,以及从标准时间到白天时间的变化,精确持续时间的计算需要减去或增加不连续持续时间的变化。
为了进一步澄清,根据https://standards.calconnect.org/csd/cc-51003.pdf,RFC 5545 具有标称持续时间(以本地时钟时间表示)和精确持续时间(忽略 DST 的现实世界秒表)的概念。上面的语言是关于如何将名义上的持续持续时间转换为精确的持续时间。
这个问题并不特定于特定的日历实现,但我在这里标记了 Google 日历和 Outlook,因为使用这些 API 的开发人员可能对这些问题有最多的了解。
【问题讨论】:
标签: calendar google-calendar-api icalendar rfc5545 outlook-calendar