如何让ics文件调整到本地时间而不是更改时间

How to get ics file to adjust to local time instead of changed time

我正在开发一个日程安排应用程序,该应用程序利用 ics 文件在 outlook 中设置约会,我遇到的问题是约会时间会根据时区而变化,我也不想这样做。例如,我想从中部时间上午 11 点到中午进行预约,IC 会更改以适应东部时区,并从中午到下午 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

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

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

DTEND:20201007T170000Z
DTSTART:20201007T160000Z

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

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