首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iCal4j时区与Microsoft Outlook时区不兼容?

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

Stack Overflow用户
提问于 2012-08-09 06:13:13
回答 4查看 6.1K关注 0票数 1

我正在创建一个应用程序来创建.ics文件使用iCal4j(1.0.3)应用程序接口,它工作fine.However我遇到了一个关于时区的问题。我已经添加了ZoneInfoOutlook(1.0.2)库,并且一直在使用它来创建我的.ics文件。但是,Outlook无法识别标准时区。例如,当我生成以下代码时:

代码语言:javascript
复制
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无法识别时区。经过一些实验后,我发现在稍微修改了文件,将America/New_York改为东部标准时间后,Outlook可以很好地读取时区。

代码语言:javascript
复制
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 Outlook2010 (14.0.6117.5001) SP1。

有没有人知道iCal mod或者其他方法可以让时区与Microsoft Outlook完全兼容?

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-18 13:07:28

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

代码语言:javascript
复制
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_COMPATIBILITY提示),但实际隐式更改标识符会有点困难。

虽然您可以在自己的代码中完成此操作,例如,从注册表中检索时区,获取底层VTimeZone对象并替换TZID参数(但同样可能需要ical4j更改以在输出时引用TZID )。

票数 1
EN

Stack Overflow用户

发布于 2012-08-09 15:45:36

时区在icalendar中不是隐含的,你应该通过在你的ics文件中使用VTIMEZONE组件来显式命名;参见rfc5545§3.6.5。时区组件(timezone component)

票数 0
EN

Stack Overflow用户

发布于 2012-08-22 08:13:18

我终于能够通过“引用”TZID参数来获得类似的效果,但是按照作者的建议启用OUTLOOK_COMPATIBILITY提示并不起作用。相反,我不得不手动完成此操作:

代码语言:javascript
复制
TzId tzid = new TzId("\"America/Vancouver\"");

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11873976

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档