27

iCalendar 规范中,我发现以下关于DTSTAMP的信息:

此属性不同于“CREATED”和“LAST-MODIFIED”属性。这两个属性用于指定日历存储中的特定日历数据的创建时间和上次修改时间。这与创建或上次修改日历服务信息的 iCalendar 对象表示时不同。

这意味着什么?我将事件存储在数据库中并希望生成 iCal 文件。我假设在创建事件时应该将 CREATED 设置为,但是我应该将 DTSTAMP 设置为什么?

4

3 回答 3

35

VEVENT与日历应用程序中的事件

*.ical 或 *.ics 文件或另一个可比较的数据流包含从一个日历应用程序发送到另一个日历应用程序的消息。日历应用程序将事件存储为对象

您可以通过单击和键入在日历中输入事件,但另一种方法是导入带有 VEVENT 消息的 ical 文件。不要将这些 VEVENT 消息视为应用程序事件对象的副本。把它想象成你点击和打字的重复。

考虑到这个想法,很容易理解,VEVENT 不仅可以创建事件。它还可以更改现有事件,甚至可以从应用程序中删除事件。

现在让我们看一下在这种情况下很重要的一些字段:


已创建

这是在日历应用程序中创建事件对象的时间戳。每个事件对象都可以由唯一标识符 (UID) 标识。


DTSTAMP

这是在 ical 或 ics 文件中创建 VEVENT 消息的时间戳。这种 VEVENT 消息有多种类型,创建一个新的事件对象只是其中之一。如果您将正确的 UID 添加到 VEVENT 消息以识别它属于哪个事件对象,您还可以更改现有事件甚至取消事件。因此,对于日历应用程序中的一个事件对象(由其 UID 标识),您可以接收许多 VEVENT 事件,每个事件都有自己的 DTSTAMP,但都指的是只有一个创建日期的事件。


顺序

这不是时间戳,而是数字(整数)。如果省略序列号,则将其视为SEQUENCE:0。如果同一事件对象(相同的 UID)有多个 VEVENT(在一个或多个文件中接收),则将通过增加序列号来处理它们。DTSTAMP 只是告诉您 VEVENT 的创建时间,但它不影响执行顺序,执行顺序由字段 SEQUENCE 定义。因此,请确保您的 callendar 应用程序中的每次更改都会为 VEVENT 设置一个新的 DTSTAMP 以及一个递增的 SEQUENCE 编号。


最后修改

这又是日历应用程序中对象的时间戳。当您收到一个带有 VEVENT 消息的 ical 文件,其 DTSTAMP 是今天上午 9 点,并且您在上午 10 点将其输入到您的应用程序中,那么上午 10 点是 LAST-MODIFIED 的值。


CREATEDLAST-MODIFIED如何在 VEVENT 中有意义?

如前所示,CREATED 和 LAST-MODIFIED 是日历应用程序中对象的属性,而 VEVENT 是包含属性的消息,日历应用程序可以从中创建、修改或删除其对象。消息无法知道您何时将其导入应用程序,因此它无法知道您何时创建或修改对象。或者它能知道吗?为什么这些对象属性应该成为消息的一部分?

答案是:能够导出和导入日历应用程序的对象。您有两台设备(比如说一部手机和一台台式电脑),并且想要保持两台设备上的日历同步?然后,您需要从一台设备发送到另一台设备的消息,其中包含所有相关数据,包括 CREATED 和 LAST-MODIFIED 的时间戳。

由于 VEVENT 消息不仅用于模拟如上所述的单击和键入,而且还用于跨日历应用程序的不同实例同步事件对象,因此有时您还需要在 VEVENT 消息中创建和上次修改。

于 2016-05-20T13:51:54.847 回答
33

当您从数据库中的信息创建实际的 ical 文件时,应将 DTSTAMP 设置为

于 2012-07-24T15:52:24.087 回答
2

我一直在寻找这个问题的答案,虽然这里的答案有助于我理解,但我也发现iCalendar.org网站上的信息很有帮助。


简而言之:创建事件时的已创建状态,DTStamp 是指定或不指定“方法”属性时修改的时间戳,LastModified 是修改事件的时间戳。看到 LastModified 与 DTStamp 相同,加上最后一个在“方法”属性集的情况下也会发生变化。


我这里只分享原文:

创建

此属性指定日历用户代理在日历存储中创建日历信息的日期和时间。

DT戳

对于指定“METHOD”属性的 iCalendar 对象,此属性指定创建 iCalendar 对象实例的日期和时间。对于未指定“METHOD”属性的 iCalendar 对象,此属性指定与日历组件关联的信息在日历存储中最后一次修改的日期和时间。

最后修改

此属性指定与日历组件关联的信息最后在日历存储中修改的日期和时间。

于 2019-11-15T08:53:14.140 回答