2

我正在尝试使用 Java api(jar 版本 v3-rev9-1.7.0-beta)从谷歌日历中检索事件列表

此代码工作正常

Events e = service.events().list("primary").
                setMaxResults(3).
                execute(); 

其中 service 是一个日历对象。

但是,如果我添加一个 setTimeMin 或 setTimeMax 参数,像这样

Date now = new java.util.Date();
Events e = service.events().list("primary").
                setTimeMin(new DateTime(now)).
                setMaxResults(3).
                execute(); 

它返回失败消息“错误请求”。

(请注意,从这个版本开始,setTime 函数采用谷歌 DateTime 对象。我也尝试过使用先前版本的 jar,它采用字符串,但收到相同的消息)。

所以我只是想知道是否有人成功使用了这些功能——也许他们不应该以这种方式调用?有没有办法获得有关错误的更多详细信息?

谢谢 :)

4

2 回答 2

5
DateTime startTime = new DateTime(new Date(), TimeZone.getDefault());

对问题进行排序

于 2012-09-10T10:48:28.110 回答
3

我也遇到过这种情况。似乎 DateTime.toString() 或 DateTime.toStringRfc3339() 方法的格式作为 setTimeMin() 的输入不正确。

DateTime.toString() 格式为:
2012-07-04T21:02:16.590
yyyy-MM-dd'T'HH:mm:ss.SSS(SimpleDateFormat 表示法)

它期望的格式似乎接近xsd:datetime格式(无论是什么):
2012-07-04T21:02:16Z (zulu, gmt)
2012-07-04T21:02:16-07:00 (mst, -7h)
2012-07-04T21:02:16-0700 (它也适用于时区中没有冒号)
yyyy-MM-dd'T'HH:mm:ssZ (SimpleDateFormat)

可以使用 SimpleDateFormat 进行格式化:

SimpleDateFormat FMT_TIME=new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
String fromTimeStr=FMT_TIME.format(new Date());
Events evts = client.events().list(cal.getUid()).setTimeMin(fromTimeStr)
             .execute();

现在,由于我使用的是较旧的 API,如果唯一的方法是 setTimeMin(DateTime),我不确定如何做到这一点,但这应该会让你更接近。

谷歌文档或来源应该在某处提到这一点。

于 2012-07-04T21:46:31.310 回答