我正在开发一个日程安排应用程序,它利用 ics 文件在 Outlook 中设置约会,我遇到的问题是约会时间根据时区而变化,而我也不想要它。例如,我想从中部时间上午 11 点到中午进行预约,ICS 会更改以适应东部时区,并从中午到下午 1 点进行预约。这是我的 ICS 文件的样子。我尝试在 TZID 中指定时区,但它总是会调整。
BEGIN:VCALENDAR
VERSION:2.0
METHOD:REQUEST
BEGIN:VEVENT
ATTENDEE;CN=email<[email protected]>;RSVP=TRUE:mailto:[email protected]
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:[email protected]
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 组件。如果您为事件的开始/结束时间指定 TZID,则必须创建相应的 VTIMEZONE 组件来提供该时区的定义。
或者,您可以将开始/结束时间转换为 UTC,这意味着您不需要 TZID 参数:
DTEND:20201007T170000Z
DTSTART:20201007T160000Z
另一种选择:在 TZID 参数中使用 Olsen 时区 ID,并在其前面加上斜杠。但是,不能保证这适用于所有邮件客户端。
DTEND;TZID="/America/Chicago":20201007T120000
DTSTART;TZID="/America/Chicago":20201007T110000
工作解决方案:
我为这个问题创建并托管了自己的解决方案,因为我真的需要一些快速运行的东西。
然后我将其源代码和说明托管在 Github 上:https://github.com/bressanmarcos/ICS-Timezone-Fixer
在上面的链接中,您还将了解为什么会出现该问题。
简单来说,解决方案只是在前面添加 https://ics-changer.great-site.net/?ics_url=
来替换原始 .ics URL例如,如果您的原始链接是 https://link-to-original/calendar.ics,请改用 https://ics-changer.great-site.net/?ics_url=https://link-to -原始/calendar.ics
免责声明:我上面的托管解决方案只是为了方便,您也可以托管自己的服务器!!!