2014-09-05 139 views
0

我们有一个用java编写的系统,它将iCal事件发送给客户端。在某些Outlook客户端显示2小时后发生的ical事件

一位客户有一个问题,即从iCal(VCALENDAR)内容中指定,我们系统发送的所有事件在其展望中延迟2小时。

客户确保他们的电脑上正确设置了timzone,所以中欧时间。我们已经在我们的电子邮件客户端内部和我们的客户端(主要是Outlook)测试了相同的事件,事件被正确显示。

我们使用iCal4J构造MIME消息。是否有任何参数需要额外设置才能提高不同客户端上事件的时间精度?

例如,下列事件设定为10:00至12:00,但我们的客户在其展望中表示为12:00至14:00,在我们的展望中,同一事件显示正确。

这里是我们的活动主体的实例:

From: =?UTF-8?Q?Tanja_Bla=C5=BEi=C4=8D?= <******@****.***> 
To: Petra Lunder <******.******@******.***> 
Message-ID: <15605406.0.1409569454863.JavaMail."****.*****"@*******> 
Subject: test sestankov - testni sestanek 1 
MIME-Version: 1.0 
Content-Type: text/calendar; method=REQUEST; charset="utf-8" 
Content-Transfer-Encoding: 8bit 

BEGIN:VCALENDAR 
PRODID:-//4pm - Arctur d.o.o.//iCal4j 1.0//EN 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:REQUEST 
BEGIN:VEVENT 
DTSTAMP:20140901T110414Z 
DTSTART:20140912T100000 
DTEND:20140912T120000 
SUMMARY:test sestankov - testni sestanek 1 
TZID:Europe/Prague 
ORGANIZER;CN=Tanja Blažič:mailto:********@*********** 
LOCATION: 
DESCRIPTION:testni sestanek\n---------------------------------------\nsta 
tus dogodka: potrjen\n---------------------------------------\ntrenutno 
stanje udeležbe na dogodku\n-------------------------------------\nPetra 
    Lunder - nedoločeno\nSimon Cigoj - nedoločeno\nVesna Kobal - nedoločeno 
\n 
SEQUENCE:0 
UID:[email protected]_4pm_a 
STATUS:CONFIRMED 
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Petra Lunder;PARTSTAT=NEEDS-AC 
TION:mailto:******.******@*****.** 
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Simon Cigoj;PARTSTAT=NEEDS-ACT 
ION:mailto:******.******@*****.** 
ATTENDEE;ROLE=REQ-PARTICIPANT;RSVP=TRUE;CN=Vesna Kobal;PARTSTAT=NEEDS-ACT 
ION:mailto:******.******@*****.** 
END:VEVENT 
END:VCALENDAR 

我的Java ical4j代码:

DateTime start = new DateTime(_startDate); 
    DateTime end = new DateTime(_endDate); 

    //meeting = new VEvent(start, end, StringUtilities.clearLatinLetters(_sumamry)); 
    meeting = new VEvent(start, end, _sumamry); 

    TimeZoneRegistry registry = TimeZoneRegistryFactory.getInstance().createRegistry(); 
    VTimeZone tz = registry.getTimeZone(LocaleUtil.getTimeZoneID()).getVTimeZone(); 

    Organizer $organizer = new Organizer(URI.create("mailto:" + _organizerEmail)); 
    $organizer.getParameters().add(new Cn(_organizerName)); 
    meeting.getProperties().add($organizer); 

    Location $location = new Location(_location); 
    meeting.getProperties().add($location); 

    Description $description = new Description(_description); 
    meeting.getProperties().add($description); 

    meeting.getProperties().add(new Sequence(Integer.parseInt(_sequence + ""))); 

    meeting.getProperties().add(new Uid(_customerEventId)); 


    calendar = new Calendar(); 
    // $calendar.getProperties().add(new ProdId("-//Ben Fortuna//iCal4j 1.0//EN")); 
    calendar.getProperties().add(new ProdId("-//4pm - Arctur d.o.o.//iCal4j 1.0//EN")); 
    calendar.getProperties().add(Version.VERSION_2_0); 
    calendar.getProperties().add(CalScale.GREGORIAN); 
    calendar.getProperties().add(_method.toIcal4j()); 
    calendar.getComponents().add(meeting); 
    calendar.getComponents().add(tz); 

回答

0

此问题的最可能的原因是财产TZID设置为欧洲/布拉格,但您确实在日历中包含组件VTIMEZONEsee RFC5545 3.6.5),它在某些系统上的工作原因是Outlook和其他版本已添加对Olson时区的支持,但这不是RFC标准中严格意义上的一部分。

+0

嗯一个如何使用ical4j? – simonC 2014-09-08 07:31:25

+0

从未使用过ical4j,但这似乎解决了这个问题:http://wiki.modularity.net.au/ical4j/index.php?title=Timezones#Referencing_the_default_registry – oberron 2014-09-15 05:01:14

1

扩展Oberron的答案,将分区时间放在Icalendar中,您需要一个顶级VTIMEZONE元素,该元素定义时区中的时区 TZID属性,例如。 DTSTART; TZID =欧洲/布拉格:20140912T100000。 TZID不应该坐在自己身上,与时间无关,在我眼中。

Ical4j应该为你做这个。见this page。尝试加载时区注册表,如图所示...

TimeZoneRegistry registry = builder.getRegistry(); 
+0

我已经看到了ical4j wiki页面,并且遵循他们的exampled,但是结果是一样的。我用我的java代码更新了这个问题。如果我使用VTimeZone,则不会在消息中创建顶层元素VTIMEZONE,但仅创建TZID。 – simonC 2014-09-08 11:19:02

+0

在你的代码中,我看不到魔线“calendar.getComponents()。add(tz);” ?? – bbsimonbb 2014-09-08 13:39:54

+0

好吧我已经将时区添加到日历,现在outlook说“不支持日历消息”:-)我已经使用欧洲/布拉格作为tzid,VTIMEZONE被添加为顶级元素,但看起来像outlook不喜欢它。 – simonC 2014-09-08 14:04:29

相关问题