如何在ics文件中指定时区,以便与google、outlook和apple有效配合?
我想生成一个ics文件,它将与谷歌,outlook和苹果日历兼容。我可以做得很好,但问题是我不能在文件中指定时区块,它将兼容上述应用程序。我目前使用的是X-Wr-timezone属性,它不适用于outlook,在google中提供不同的时间。我需要这个问题的解决方案。我的ics文件:如何在ics文件中指定时区,以便与google、outlook和apple有效配合?,outlook,calendar,google-calendar-api,icalendar,Outlook,Calendar,Google Calendar Api,Icalendar,我想生成一个ics文件,它将与谷歌,outlook和苹果日历兼容。我可以做得很好,但问题是我不能在文件中指定时区块,它将兼容上述应用程序。我目前使用的是X-Wr-timezone属性,它不适用于outlook,在google中提供不同的时间。我需要这个问题的解决方案。我的ics文件: BEGIN:VCALENDAR PRODID:-//sample//sam Calendar//EN VERSION:2.0 X-MS-OLK-FORCEINSPECTOROPEN:TRUE X-WR-TIMEZO
BEGIN:VCALENDAR
PRODID:-//sample//sam Calendar//EN
VERSION:2.0
X-MS-OLK-FORCEINSPECTOROPEN:TRUE
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VEVENT
DTSTART;TZID=America/Los_Angeles:20160206T074400
DTEND;TZID=America/Los_Angeles:20160206T084400
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
LOCATION: Pune
SEQUENCE:0
PRIORITY:5
STATUS:CONFIRMED
SUMMARY:Appointment Details:- John Bond
UID:X:201600U2800000A9Yp0EAF@sample
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR
在VEVENT之前使用VTIMEZONE组件: 因此,最终组装的ICS文件如下所示(根据OP的ICS文件;注意:在他的第一行,VCALENDAR的“R”被推到第二行“PRODID”的开头,我在回答中已更正): 我没有测试过这个特定的IC,因此无法预测将VTIMEZONE和X-WR-TIMEZONE同时使用的行为 另一个微妙之处是日期/时间格式不能包含时区。因此,例如,如果要在PHP中构建它,您需要确保:
const DT_FORMAT = 'Ymd\THis';
e、 g。
DTSTART:20160206T074400
而不是:
const DT_FORMAT = 'Ymd\THis\Z';
e、 g。
DTSTART:20160206T074400Z
此日期/时间格式对于VEVENT块中的日期/时间非常重要。当“LAST_MODIFIED”字段末尾有一个“Z”时,我获得了成功
在旁注中,OP在洛杉矶时区工作,但这个答案显示了VTIMEZONE区块中的纽约信息。必须计算洛杉矶的适当信息(例如夏令时补偿等)
最后观察,新行“\n”从2018年4月起不适用于谷歌日历。只要使用“版本:2.0”,iCal就会遵守它。假设提问者住在洛杉矶,并使用最新的US-EN版本OUTLOOK。 我不知道为什么要在纽约指定时区。 我发现重要的一点是如何在ics文件中指定时区,设置5项相同的值
X-WR时区:美国/洛杉矶
TZID:America/Los_Angeles
X-LIC-LOCATION:美国/洛杉矶
DTSTART;TZID=“美国/洛杉矶”
DTEND;TZID=“美国/洛杉矶”
RRULE
a.k.a循环规则。当然,以前的代码也可以工作。
尽管如此,即使在2019年9月,新线 \n(意味着回车或/和换行)对于安道尔智能手机上的谷歌日历仍然有效。
下面的项目不太需要
UID:
在使用SEQUENCE之前,请删除计划程序中添加的项SEQUENCE:0
VTIMEZONE
是一个很好的提示。VTIMEZONE
的RRULE
中缺少的BYDAY
是我遇到的问题,我在VTIMEZONE
上运气不好,所以我只好跟着。我不确定是我弄错了语法,还是苹果日历太麻烦了。日期格式后面的“Z”是我面临的问题。非常感谢。
const DT_FORMAT = 'Ymd\THis';
const DT_FORMAT = 'Ymd\THis\Z';
BEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 19.0 MIMEDIR//EN
VERSION:2.0
X-WR-TIMEZONE:America/Los_Angeles
METHOD:PUBLISH
BEGIN:VTIMEZONE
TZID:America/Los_Angeles
X-LIC-LOCATION:America/Los_Angeles
BEGIN:DAYLIGHT
TZOFFSETFROM:-0800
TZOFFSETTO:-0700
TZNAME:PDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0700
TZOFFSETTO:-0800
TZNAME:PST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
BEGIN:VEVENT
SUMMARY:Appointment
LOCATION:Pune
DESCRIPTION:Your appointment Details:\n\nPatient Details:Kou Kul\nKeven\n\nAppointment Type:Counselling (30 min)\n\nThanks.
DTSTART;TZID="America/Los_Angeles":20160206T074400
DTEND;TZID="America/Los_Angeles":20160206T084400
PRIORITY:5
STATUS:CONFIRMED
TRANSP:OPAQUE
END:VEVENT
END:VCALENDAR