为包括Google在内的多个客户编写ICS文件

And*_*rew 8 php icalendar timezone

我需要编写一个用于发布.ICS文件的脚本.我已经读过很难做到这一点,要么是因为一些日历客户端有错误(许多人声称谷歌日历非常错误,特别是关于时区)或者因为开发人员没有正确遵守规范.我只需要为北美做这件事,但我必须考虑到DST(记住像亚利桑那州这样的地方,其中一部分观察夏令时,其中一部分没有).

谁能回答这些问题?

  1. 在指定事件的开始和结束时间时,是否应始终在用户的本地时间提供,还是可以将其作为UTC时间发送并留给客户端进行计算?
  2. 我是否必须采取任何额外步骤来考虑用户所在地的夏令时?
  3. 我是否需要采取任何额外步骤来解释Google?

还有其他提示吗?

anm*_*ari 8

你听说没错 - 这并不容易.易于提供非常基本的支持,而不是那么容易提供对提供者可能输出的内容的完全支持; 特别是复发,例外,修改和是时区.

我很长一段时间一直在为我的ics发行商工作,现在它非常稳定.我一路上做了一些笔记.

请参见http://icalevents.com/category/notes/.此外,我的网站上的时区标签可能会对您有所帮助.

特别是,如果您正在进行重复活动,那么"ical cheatsheet"值得一看.在完成之后我重写了我的重复引擎.

谷歌我没有发现是一个问题,它是较小的玩家,特别是当他们开始做一些非标准的东西(Zimbra/Pc基于tz等).

虽然谷歌更新速度很慢(即有人更新他们的谷歌日历,你重新获取ics文件(绝对不是你的缓存)并且它没有更新 - 可能需要一个小时左右.这对我们学校来说没有好处做他们的时事通讯 - 他们也从网站上做了一个印刷品.所以我现在已经开始创建另一面 - 我们自己的ics编辑器.

那里有各种各样的自由剧本 - 为什么要自己动手?热衷于挑战?


Ada*_*son 5

ICS文件中的时间可以是浮动的也可以是固定的.

浮动日期时间不包含对UTC或时区的引用 - 时间应该是ATTENDEE应在其当地时区到达会议的时间.这可能导致不同的与会者在不同时间举行会议,因此应谨慎使用(或永远不要!).

固定时间是更好的方式.格式会根据会议是否以UTC格式进行更改.

对于UTC会议,用于Z指定UTC:

19980119T070000Z
Run Code Online (Sandbox Code Playgroud)

如果会议不是UTC,请使用TZID格式指定时区.以下代表纽约时间凌晨2点:

TZID=America/New_York:19980119T020000
Run Code Online (Sandbox Code Playgroud)

注意:TZID格式不应用于UTC时间.

所有这些都在RFC 5545,第3.2.193.3.4节中规定

RFC有关于DST的以下内容 - 请阅读它的内容!

如果基于引用时区的定义,所描述的本地时间不止一次发生(当从日光变为标准时间时),DATE-TIME值指的是引用时间的第一次出现.因此,TZID = America/New_York:20071104T013000表示2007年11月4日美国东部时间凌晨1:30(UTC-04:00).如果未描述所描述的本地时间(从标准时间更改为白天时间时),则使用本地时间间隔之前的UTC偏移量来解释DATE-TIME值.因此,TZID = America/New_York:20070311T023000表示2007年3月11日美国东部时间凌晨3:30(UTC-04:00),美国东部标准时间凌晨1:30(UTC-05:00).