VEVENT 与日历应用程序中的事件
*.ical 或 *.ics 文件,或另一个可比较的数据流包含从一个日历应用程序发送到另一个日历应用程序的消息。日历应用程序将事件存储为对象。
您可以通过单击和键入在日历中输入事件,但另一种方法是导入带有 VEVENT 消息的 ical 文件。不要将这些 VEVENT 消息视为应用程序事件对象的副本。把它想象成你点击和打字的重复。
考虑到这个想法,很容易理解,VEVENT 不仅可以创建事件。它还可以更改现有事件,甚至可以从应用程序中删除事件。
现在让我们看一下在这种情况下重要的一些字段:
创建
这是在日历应用程序中创建事件对象的时间戳。每个事件对象都可以通过唯一标识符 (UID) 进行标识。
DTSTAMP
这是在 ical 或 ics 文件中创建 VEVENT 消息的时间戳。这种 VEVENT 消息有多种类型,创建一个新的事件对象只是其中之一。如果您将正确的 UID 添加到 VEVENT 消息以识别它属于哪个事件对象,您还可以更改现有事件甚至取消事件。因此,对于您的日历应用程序中的一个事件对象(由其 UID 标识),您可以接收许多 VEVENT 事件,每个事件都有自己的 DTSTAMP,但都指的是只有一个 CREATED 日期的事件。
序列
这不是一个时间戳,而是一个数字(一个整数)。如果省略序列号,则将其视为SEQUENCE:0。如果同一事件对象(相同的 UID)有多个 VEVENT(在一个或多个文件中接收),则将通过增加序列号来处理它们。 DTSTAMP 只是告诉您 VEVENT 的创建时间,但它不影响执行顺序,执行顺序由字段 SEQUENCE 定义。因此,请确保您的 callendar 应用程序中的每次更改都会为 VEVENT 设置一个新的 DTSTAMP 以及一个递增的 SEQUENCE 编号。
最后修改
这又是日历应用程序中对象的时间戳。当您收到一个带有 VEVENT 消息的 ical 文件,其 DTSTAMP 是今天上午 9 点,并且您在上午 10 点将其输入到您的应用程序中,那么上午 10 点就是 LAST-MODIFIED 的值。
CREATED 和 LAST-MODIFIED 如何在 VEVENT 中有意义?
如前所示,CREATED 和 LAST-MODIFIED 是日历应用程序中对象的属性,而 VEVENT 是包含属性的消息,日历应用程序可以从中创建、修改或删除其对象。消息无法知道您何时将其导入应用程序,因此它无法知道您何时创建或修改对象。或者它能知道吗?为什么这些对象属性应该成为消息的一部分?
答案是:能够导出和导入日历应用程序的对象。您有两台设备(比如说一部手机和一台台式电脑),并且想要保持两台设备上的日历同步?然后,您需要从一台设备发送到另一台设备的消息,其中包含所有相关数据,包括 CREATED 和 LAST-MODIFIED 的时间戳。
由于 VEVENT 消息不仅用于模拟如上所述的单击和键入,而且还用于跨日历应用程序的不同实例同步事件对象,因此有时您还需要在 VEVENT 消息中创建和上次修改。