我正在编写一个iCAL文件。我在游轮上工作,该文件基本上是我未来6个月的行程,我想与其他船员分享,并显示在我们的手机上(iPhone和Android手机的混合)。我想包括我们访问的港口的名称,以及到达和离开的时间。到目前为止,很容易。
但是,在游轮上,我们几乎每天都会经过不同的时区。有些人使用本地运营商信息来设置手机时区,有些人则手动调整时区,而有些人则不愿意这样做。我以前尝试过一次,但对TIMEZONE格式感到非常困惑:是否使用带有"Z"前缀的UTC,是否指定国家代码等。
然而,最近的一点谷歌搜索发现了"浮动"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
如果该语法是正确的,那么我是否还需要指定DTSTAMP:20171123T080000Z和后缀"Z"?(我在上面读到的东西https://www.kanzaki.com/docs/ical/dtstamp.html说"Z"后缀是强制性的,尽管我不想使用UTC——我只想要浮动的开始和结束时间。)
此外,DTSTAMP时间应该与每个事件的DTSTART时间相同,还是我对每个事件使用相同的时间?
我希望你能帮助
感谢
Miles,
音乐家,
Celebrity Infinity
使用浮动时间意味着实际使用的时区实际上在事件查看器的时区中。
因此,如果您在晚上8点浮动时间安排活动,并且:"用户A"的时区设置为东部,现在是晚上7:55,活动将在5分钟后发生,那么将手机设置为中部时间的用户"B"将看到活动从现在开始1小时+5分钟。
换句话说,使用浮动时间意味着用户查看的实际时间将取决于事件的查看器。
这不是你想要的。因为你将在固定的时间点到达和离开。你真的有两个选择:
- 使用UTC
- 使用本地时间+港口时区
UTC在您的情况下可能更简单,但需要注意。你提到里约热内卢,巴西对夏令时的处理并不出色。
因此,你可能计划在当地时间下午2点到达某个地方,但在你到达前几周,巴西政府决定推迟或取消当年的夏令时。那么,问题是,从UTC的角度来看,船是在一小时后(仍然是当地时间下午2点)出发,还是在同一时间出发?
你可能会认为这是一个边缘情况,并在需要时进行调整,但我认为值得讨论这种情况。
不管怎样,忽略这一点,"当地时间+TZ"或"UTC"可能对你来说已经足够了。如果您使用"美国/圣保罗"作为出发时间,则人员:
- 自动从运营商获取时间和时区,它将"正常工作">
- 手动更改时区,它将"正常工作">
我想我更喜欢当地时间+TZ,因为这是对事件最"准确"的表示。