如何每 x 秒重复 ICS 文件中的事件?

Posted

技术标签:

【中文标题】如何每 x 秒重复 ICS 文件中的事件?【英文标题】:How do I repeat events in an ICS file every x seconds? 【发布时间】:2017-04-14 08:55:29 【问题描述】:

我正在尝试在 macOS Sierra 的日历中设置日历事件,该事件每 2,551,440 秒重复一次(恰好是月球的会合周期)。该系统使用 ICS 规范。

最终,我想要一个提供我所在位置的月亮升起和落下时间的日历,并且还需要列出月相(例如满月、新月等)。我在互联网上找到了很多人们手动创建事件的例子,但这非常乏味(多年来每天一个事件!),而且它们基于不同的时区(所以对我没有用) .

我从 ICS 规范中看到,文件格式本身支持每 x 秒重复一次的事件。我将事件导出为 ICS 文件(来自日历),然后在文本编辑器中编辑了 ICS 文件,但我一定是代码错误,因为它没有以正确的重复间隔重新导入 macOS 日历.相反,它导入了一个没有重复的事件。也有可能我的代码是正确的,但日历在导入时将其丢弃...

有人可以解释一下如何去做吗?

我找到了the RRULE Generator,但它只支持每小时间隔,而不是秒,因此对于我的需要来说不够精确。

我考虑过运行一个 bash 脚本来生成事件(它将作为一个 cron 作业每 2,551,440 秒运行一次),但这只会提前一个月通知。我宁愿无限期地设置它。

另一种选择可能是用 Python 编写脚本来创建单独的 ICS 事件文件;这也会很乏味...

我知道这不能直接在日历中完成;解决方案很可能是手动编辑每个 ICS 文件以正确设置重复,然后将它们导入日历...我只是不知道如何...

...或者是否有一个日历应用程序可以让您设置每 x 秒重复一次的事件?如果是这样,我可以在其中创建事件,将其导出,然后将其导入日历...

提前感谢您的任何想法。

【问题讨论】:

【参考方案1】:

所以,我想出了这个。

    Apple 日历、Google 日历和几乎所有日历应用程序都不支持每 x 秒重复一次的事件。 ICS 格式本身可以,而不是程序。

    月球在一个倾斜的轨道上,所以无论如何这对我想要的都是不合适的解决方案。

    US Navy has an API 发布月球的升起/落下和相位数据。我保存了这个页面的响应(一个 JSON 文件),并做了一些 Python 代码来提取所需的数据,然后制作了一个 Python 脚本来为每个事件(每个月升一个事件)创建单独的 .ICS 文件(即 不是每 x 秒重复一次的事件)。然后我将这些 ICS 文件导入到 macOS 日历中。

希望这对将来需要处理类似情况的其他人有所帮助...

【讨论】:

以上是关于如何每 x 秒重复 ICS 文件中的事件?的主要内容,如果未能解决你的问题,请参考以下文章

tkinter GUI 不会每 10 秒更新一次标签并且不会关闭 [重复]

Outlook不会将ics显示为邮件中的事件

如何在mvc 4中的特定间隔后重复调用方法[关闭]

如何每 x 秒调用一次方法?

使用 icalendar 获取重复事件

每 x 秒/分钟发送和接收重复信息的架构