Google Calendars API - setTimeMax导致错误

时间:2012-06-21 09:03:36

标签: java google-calendar-api

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

此代码可以正常使用

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

其中service是Calendar对象。

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

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

它返回失败消息“Bad Request”。

(请注意,从此版本开始,setTime函数会使用google DateTime对象。我也尝试使用以前版本的jar,它接受一个字符串,但收到相同的消息)。

所以我只是想知道是否有人成功使用过这些功能 - 也许它们不应该以这种方式被调用?有没有办法在错误上获得更多细节?

谢谢:)

2 个答案:

答案 0 :(得分:5)

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

对问题进行排序

答案 1 :(得分: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),我不确定如何做到这一点,但这应该让你更接近。

Google文档或来源应该在某处提及。