iCAL DTSTART和DTEND格式混淆。应该很容易回答

时间:2017-11-13 22:19:21

标签: datetime timezone icalendar

我正在写一个iCAL文件。我在游轮上工作,文件将基本上是我未来6个月的行程,我希望与其他机组成员分享,在我们的手机上显示(iPhone和Android手机的混合物)。我想要包括我们访问的港口的名称,以及到达和离开时间。到目前为止,这很容易。

但是,在游轮上,我们几乎每天都会经过不同的时区。有些人使用本地运营商信息设置手机时区,其他人手动调整时区,有些人也不愿意这样做。之前我试过这个,但是对TIMEZONE格式非常困惑:是否使用UTC和' Z'前缀,是否指定国家代码等。

但是,最近的一些谷歌搜索出现了“浮动”的声音。 DTSTART和DTEND格式,又名'本地时间',似乎取消了所有地区和时区规范。那么,我是否正确地认为以下内容会起作用?

(资料来源:11月23日,里约热内卢,上午8:00至下午6:00,
 11月25日,不同的港口,上午10:00至晚上8:30)

    BEGIN:VCALENDAR
    VERSION:2.0
    PRODID: MyNameHere
    BEGIN:VEVENT
    UID:milesmuso.mf@qwertyqwertyqwerty.com
    DTSTAMP:20171123T080000Z
    DTSTART:20171123T080000
    DTEND:20171123T180000
    SUMMARY:Rio De Janiero
    END:VEVENT
    .
    BEGIN:VEVENT
    UID:milesmuso.mf@qwertyqwertyqwerty.com
    DTSTAMP:20171125T100000Z
    DTSTART:20171125T100000
    DTEND:20171125T203000
    SUMMARY:Another Port
    END:VEVENT
    .
    .
    BEGIN: VEVENT
    (next event here)
    END VEVENT
    END:VCALENDAR

如果该语法是正确的,那么我是否还需要使用' Z'指定DTSTAMP:20171123T080000Z。后缀? (我在https://www.kanzaki.com/docs/ical/dtstamp.html上读到的内容表示' Z'后缀是强制性的,即使我不想使用UTC - 我只想要浮动开始和结束时间。)

此外,DTSTAMP时间是否与每个事件的DTSTART时间相同,或者我是否为每个事件使用相同的时间?

我希望你能帮忙

由于

数,
音乐家,
名人无限

1 个答案:

答案 0 :(得分:2)

使用浮动时间意味着实际使用的时区实际上位于事件查看者的时区内。

因此,如果你在晚上8点浮动时间安排一些事情,并且:“用户A”的时区设置为东部,而且是晚上7:55,事件将在5分钟后发生,然后用户“B”拥有他们的电话设置为中央时间将看到事件从现在开始一小时+5分钟。

换句话说,使用浮动时间意味着用户查看的实际时间将取决于事件的查看者。

这是你想要的。因为你要在固定时间到达和离开。你真的有两个选择:

  1. 使用UTC。
  2. 使用本地时间+端口的时区
  3. UTC在您的情况下可能更简单,但有一点需要注意。你提到Rio De Janairo,巴西对DST(夏令时)的处理并不是很好。

    因此,您可能计划在当地时间下午2点到达您的船,但在您做之前的几周,巴西政府决定推迟或取消当年的夏令时。那么问题是,船是否会在一小时后离开(当地时间仍然是下午2点),还是从UTC角度完全同时离开?

    您可能会认为这是一个边缘情况,并在需要时进行调整,但是我认为值得讨论这种情况。

    无论如何,忽略这一点,“本地时间+ TZ”或“UTC”都可能对你来说足够好。如果您使用“America / Sao_Paulo”作为出发时间和人员:

    • 自动从运营商那里获得时间和时区,它将“正常工作”
    • 手动更改了他们的时区,它将“正常工作”

    我想我更喜欢当地时间+ TZ,因为它是该活动最“准确”的代表。