微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将 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 举报,一经查实,本站将立刻删除。