iCal4j时区与Microsoft Outlook时区不兼容?

iCal4j时区与Microsoft Outlook时区不兼容?,outlook,timezone,icalendar,ical4j,Outlook,Timezone,Icalendar,Ical4j,我正在创建一个应用程序,使用iCal4j(1.0.3)api创建.ics文件,该api运行良好。但是我遇到了时区问题。我已经添加了ZoneInfo Outlook(1.0.2)库,并一直在使用它创建我的.ics文件。但是,Outlook无法识别标准时区。例如,当我生成以下内容时: BEGIN:VCALENDAR VERSION:2.0 PRODID:-//Ben Fortuna//iCal4j 1.0//EN CALSCALE:GREGORIAN METHOD:PUBLISH BEGIN:VEV

我正在创建一个应用程序,使用iCal4j(1.0.3)api创建.ics文件,该api运行良好。但是我遇到了时区问题。我已经添加了ZoneInfo Outlook(1.0.2)库,并一直在使用它创建我的.ics文件。但是,Outlook无法识别标准时区。例如,当我生成以下内容时:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID=America/New_York:20120808T020000
DTEND;TZID=America/New_York:20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:America/New_York
END:VEVENT
BEGIN:VTIMEZONE
TZID:America/New_York
TZURL:http://tzurl.org/zoneinfo-outlook/America/New_York
X-LIC-LOCATION:America/New_York
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR  
Outlook无法识别时区。经过一些实验,我发现在稍微修改了文件,将美国/纽约时间更改为东部标准时间后,Outlook可以完美地读取时区

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="Eastern Standard Time":20120808T020000
DTEND;TZID="Eastern Standard Time":20120808T180000
SUMMARY:NewYork Event
LOCATION:Manhattan
DESCRIPTION:This is a test Description
TZID:Eastern Standard Time
END:VEVENT
BEGIN:VTIMEZONE
TZID:Eastern Standard Time
X-LIC-LOCATION:Eastern Standard Time
BEGIN:DAYLIGHT
TZOFFSETFROM:-0500
TZOFFSETTO:-0400
TZNAME:EDT
DTSTART:19700308T020000
RRULE:FREQ=YEARLY;BYMONTH=3;BYDAY=2SU
END:DAYLIGHT
BEGIN:STANDARD
TZOFFSETFROM:-0400
TZOFFSETTO:-0500
TZNAME:EST
DTSTART:19701101T020000
RRULE:FREQ=YEARLY;BYMONTH=11;BYDAY=1SU
END:STANDARD
END:VTIMEZONE
END:VCALENDAR
从这个例子来看,Outlook对其时区使用非标准标签。
我目前正在测试Microsoft Outlook 2010(14.0.6117.5001)SP1

有谁知道iCal mod或其他什么方法可以让时区与Microsoft Outlook完全兼容


或者甚至是另一个允许我创建Outlook兼容的.ics文件的api?

时区在icalendar中不是隐式的,您应该在ics文件中使用VTIMEZONE组件来明确名称;
参见rfc5545§3.6.5。时区组件(

时区在icalendar中不是隐式的,您应该在ics文件中使用VTIMEZONE组件来明确名称;
请参阅rfc5545§3.6.5.时区组件(

您是否尝试仅引用现有TZID参数(即不将其更改为“东部标准时间”)?例如:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="America/New_York":20120808T020000
DTEND;TZID="America/New_York":20120808T180000
...
在ical4j中,我们可能会引用标识符(例如,如果启用了OUTLOOK_兼容性提示),但实际上隐式更改标识符有点困难


虽然您可能可以在自己的代码中执行此操作,即从注册表中检索时区,获取基础VTimeZone对象并替换TZID参数(但也可能需要进行ical4j更改以在输出时引用TZID)。

您是否尝试过仅引用现有TZID参数(即不将其更改为“东部标准时间”)?例如:

BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Ben Fortuna//iCal4j 1.0//EN
CALSCALE:GREGORIAN
METHOD:PUBLISH
BEGIN:VEVENT
DTSTAMP:20120808T211508Z
DTSTART;TZID="America/New_York":20120808T020000
DTEND;TZID="America/New_York":20120808T180000
...
在ical4j中,我们可能会引用标识符(例如,如果启用了OUTLOOK_兼容性提示),但实际上隐式更改标识符有点困难


虽然您可能可以在自己的代码中执行此操作,即从注册表中检索时区,获取基础VTimeZone对象并替换TZID参数(但可能还需要进行ical4j更改以在输出时引用TZID)。

我最终能够通过“引用”获得类似的操作TZID参数,但如作者所建议的,启用OUTLOOK_兼容性提示无效。相反,我必须手动执行此操作:

TzId tzid = new TzId("\"America/Vancouver\"");

当然,这感觉更像是一个黑客,而不是一个真正的解决方案。也许Fortuna有一个建议让它工作起来???

我最终能够通过“引用”TZID参数来获得类似的工作,但正如作者所建议的,启用OUTLOOK_兼容性提示不起作用。相反,我不得不手动执行此操作:

TzId tzid = new TzId("\"America/Vancouver\"");

当然,这感觉更像是一个黑客,而不是一个真正的解决方案。也许Fortuna有一个建议让它工作起来???

它对我有效。每当我生成ical时,我将其默认为UTC。Outlook内部将ical中的UTC时间转换为用户时区。甚至在Thunderbird和yahoo日历上也尝试过。

它对我有效。每当我我正在生成一个ical,我将其默认为UTC。Outlook在内部将ical中的UTC时间转换为用户时区。在Thunderbird和yahoo日历上也尝试过。

感谢您的响应。在该示例中,我当前有一个VTIMEZONE组件。很抱歉,我错过了这一点,我只在任何VTIMEZONE之前看到了VEVEVENT。您尝试过vt吗在vevent之前的IMEONE(尽管标准中没有强制要求这样做)我刚刚尝试更改顺序,但没有改变任何内容。您是否能够成功实施outlook的时区?感谢您的响应。在该示例中,我当前有一个VTIMEZONE组件。很抱歉,错过此示例,我只在任何VTIMEZONE之前先看到了vevent。您在vevent之前尝试过VTIMEZONE吗(尽管标准中没有强制要求这样做)我只是尝试更改顺序,但没有改变任何东西。你能成功地为outlook实现时区吗?谢谢。我最终使用了你的建议和@ray的建议,这使outlook发生了变化。这对我来说没有任何影响。谢谢。我最终使用了你的建议和@ray的建议,这使outlook发生了变化在Outlook中。这对我来说没有任何区别。