如何解决Google日历CalDAV时间范围不起作用
我正在尝试获取一个时间范围内的所有事件。这是我的CalDAV请求正文:
<?xml version="1.0" encoding="UTF-8"?>
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop xmlns:D="DAV:">
<C:calendar-data />
</D:prop>
<C:filter>
<C:comp-filter name="VEVENT">
<C:time-range end="20200920T134847" start="20200919T134847" />
</C:comp-filter>
</C:filter>
</C:calendar-query>
可以看出,我使用了时间范围分量过滤器。 不幸的是,这还会返回超出时间范围的事件:
...
DTSTART;TZID=Europe/Amsterdam:20200522T111028
DTEND;TZID=Europe/Amsterdam:20200522T121028
...
任何人都可以看到出了什么问题吗?
我看到了this和this的示例,该示例将VEVENT
comp-filter放置在VCALENDAR
comp-filter中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<c:calendar-query xmlns:c="urn:ietf:params:xml:ns:caldav" xmlns:d="DAV:">
<d:prop>
<d:getetag>
<c:calendar-data>
<c:comp name="VCALENDAR">
<c:prop name="VERSION">
<c:comp name="VEVENT">
<c:prop name="SUMMARY">
<c:prop name="UID">
<c:prop name="DTSTART">
<c:prop name="DTEND">
<c:prop name="DURATION">
<c:prop name="RRULE">
<c:prop name="RDATE">
<c:prop name="EXRULE">
<c:prop name="EXDATE">
<c:prop name="RECURRENCE-ID" />
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:prop>
</c:comp>
<c:comp name="VTIMEZONE" />
</c:prop>
</c:comp>
</c:calendar-data>
</d:getetag>
</d:prop>
<c:filter>
<c:comp-filter name="VCALENDAR">
<c:comp-filter name="VEVENT">
<c:time-range start="20060104T000000Z" end="20060105T000000Z" />
</c:comp-filter>
</c:comp-filter>
</c:filter>
</c:calendar-query>
所以我尝试了以下操作:
<?xml version="1.0" encoding="UTF-8"?>
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop xmlns:D="DAV:">
<C:calendar-data />
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range end="20200920T135938" start="20200919T135938" />
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
但是随后Google给出了以下错误消息:
<?xml version="1.0" encoding="UTF-8"?>
<errors xmlns="http://schemas.google.com/g/2005">
<error>
<domain>GData</domain>
<code>badRequest</code>
<internalReason>Bad Request</internalReason>
</error>
</errors>
我似乎无法弄清楚哪里出了问题。
//更新:
我尝试了the example from icalendar.org,该方法似乎有效。唯一的问题是我无法使用caldav4j复制该请求正文。
我还尝试从caldav4j复制确切的示例:
<?xml version="1.0" encoding="UTF-8"?>
<C:calendar-query xmlns:C="urn:ietf:params:xml:ns:caldav">
<D:prop xmlns:D="DAV:">
<D:getetag />
<C:calendar-data>
<C:comp name="VCALENDAR">
<C:comp name="VEVENT">
<C:prop name="SUMMARY" />
<C:prop name="UID" />
<C:prop name="DTSTART" />
<C:prop name="DTEND" />
<C:prop name="DURATION" />
<C:prop name="RRULE" />
<C:prop name="RDATE" />
<C:prop name="EXRULE" />
<C:prop name="EXDATE" />
<C:prop name="RECURRENCE-ID" />
</C:comp>
<C:comp name="VTIMEZONE" />
<C:prop name="VERSION" />
</C:comp>
</C:calendar-data>
</D:prop>
<C:filter>
<C:comp-filter name="VCALENDAR">
<C:comp-filter name="VEVENT">
<C:time-range end="20200920T161921" start="20200919T161921" />
</C:comp-filter>
</C:comp-filter>
</C:filter>
</C:calendar-query>
不幸的是,它给出了另一个badRequest响应。
解决方法
最后,我最终切换到另一个CalDAV服务器(Radicale)进行服务器端日志记录。原来,时间符号应以“ Z”结尾。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。