如何将 iCal 的 VTIMEZONE 定义解析为 nodatime 类型

问题描述

我的应用程序使用 ical.net 处理 iCal 约会。在某些情况下,我必须将约会转换为参与者的时区。由于我目前使用 Nodatime 进行所有日期操作,因此我想将约会的开始和结束日期转换为 zoneddatetime 对象(或转换为另一种可以在时区之间进行转换的 Nodatime 类型)。

为此,我首先必须将嵌入在 iCal 中的时区转换为 Nodatime 类型。

我的问题是: 能否将下面的时区定义解析为等效的 Nodatime 类型,以便我可以将约会转换为其他时区?

如果是这样,最好的方法是什么?我无法想象自己是第一个遇到这个问题的人。

如果没有,还有其他方法可以实现我的流程吗?还是我完全走错了路,不得不考虑另一种实现方式?

BEGIN:VTIMEZONE
TZID:(UTC+01:00) Amsterdam,Berlin,Bern,Rome,Stockholm,Vienna
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE

更新

为了完整起见,这里是整个 iCal 文件

BEGIN:VCALENDAR
METHOD:REQUEST
PRODID:Microsoft Exchange Server 2010
VERSION:2.0
BEGIN:VTIMEZONE
TZID:(UTC+01:00) Amsterdam\,Berlin\,Bern\,Rome\,Stockholm\,Vienna
BEGIN:STANDARD
DTSTART:16010101T030000
TZOFFSETFROM:+0200
TZOFFSETTO:+0100
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10
END:STANDARD
BEGIN:DAYLIGHT
DTSTART:16010101T020000
TZOFFSETFROM:+0100
TZOFFSETTO:+0200
RRULE:FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3
END:DAYLIGHT
END:VTIMEZONE
BEGIN:VEVENT
ORGANIZER;CN="John Doe":MAILTO:john@doe.com
ATTENDEE;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-ACTION;RSVP=TRUE;CN=Jane Doe
 :MAILTO:jane@doe.com
DESCRIPTION:Description
UID:ical-uid
SUMMARY:Summary
DTSTART;TZID="(UTC+01:00) Amsterdam,Vienna":2
 0210427T100000
DTEND;TZID="(UTC+01:00) Amsterdam,Vienna":202
 10427T110000
CLASS:PUBLIC
PRIORITY:5
DTSTAMP:20210419T125618Z
TRANSP:OPAQUE
STATUS:CONFIRMED
SEQUENCE:2
LOCATION:Location
BEGIN:VALARM
DESCRIPTION:REMINDER
TRIGGER;RELATED=START:-PT15M
ACTION:disPLAY
END:VALARM
END:VEVENT
END:VCALENDAR

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)