首页 > 解决方案 > 如何让 ics 文件调整为当地时间而不是更改时间

问题描述

我正在开发一个调度应用程序,该应用程序利用 ics 文件在 Outlook 中设置约会,我遇到的问题是约会时间根据时区而变化,我也不想要它。例如,我想从中部时间上午 11 点到中午设置约会,ICS 将更改以适应东部时区,并从中午到下午 1 点进行。这是我的 ICS 文件的样子。我尝试在 TZID 中指定时区,但它总是会调整。

    BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ATTENDEE;CN=email<email@email.org>;RSVP=TRUE:mailto:email@email.org
CLASS:PUBLIC
CREATED:20201007T114658Z
DESCRIPTION:
DTEND;TZID="Central Standard Time":20201007T120000
DTSTAMP:20201007T114908
DTSTART;TZID="Central Standard Time":20201007T110000
LOCATION:Unknown
ORGANIZER;CN="Appointment":mailto:AppointmentsManager@email.org
PRIORITY:5
SEQUENCE:1
SUMMARY;LANGUAGE=en-us:east
TRANSP:OPAQUE
UID:X9053866f41994acda100ded7fb305ebe
BEGIN:VALARM
TRIGGER:-PT1H
ACTION:DISPLAY
DESCRIPTION:Reminder
END:VALARM
END:VEVENT
END:VCALENDAR

标签: outlookcalendaricalendar

解决方案


您的 ICS 文件没有 VTIMEZONE 组件。如果为事件的开始/结束时间指定 TZID,则必须创建相应的 VTIMEZONE 组件来提供该时区的定义。

或者,您可以将开始/结束时间转换为 UTC,这意味着您不需要 TZID 参数:

DTEND:20201007T170000Z
DTSTART:20201007T160000Z

另一种选择:在 TZID 参数中使用 Olsen 时区 ID,并在其前面加上斜杠。但是,这不能保证适用于所有邮件客户端。

DTEND;TZID="/America/Chicago":20201007T120000
DTSTART;TZID="/America/Chicago":20201007T110000

推荐阅读