gpt4 book ai didi

java - 某些 Outlook 客户端中的 ical 事件延迟显示 2 小时

转载 作者:行者123 更新时间:2023-12-01 12:34:46 25 4
gpt4 key购买 nike

我们有一个用 java 编写的系统,它将 iCal 事件发送到客户端。

一位客户遇到一个问题,即从我们系统发送的所有事件在其 Outlook 中的显示都晚了 2 小时,正如 iCal(VCALENDAR) 内容中指定的那样。

客户确保他们的计算机上的时区设置正确,因此为中欧时间。我们在内部电子邮件客户端上测试了相同的事件,并且在我们的客户端(主要是 Outlook)中,事件正确显示。

我们使用 iCal4J 来构造 mime 消息。是否需要额外设置任何参数来提高不同客户端上事件的时间准确性?

例如,以下事件设置为 10:00 到 12:00,但我们的客户在他们的 Outlook 中将其表示为 12:00 到 14:00,在我们的 Outlook 中,相同的事件正确显示。

这是我们的事件主体的示例:

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:2010250@em_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);

最佳答案

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

Ical4j 应该为你做这件事。请参阅this page 。尝试加载时区注册表,如图所示...

TimeZoneRegistry registry = builder.getRegistry();

关于java - 某些 Outlook 客户端中的 ical 事件延迟显示 2 小时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25686970/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com