2012-06-21 6 views
2

Je suis en train de récupérer une liste d'événements d'un calendrier Google, en utilisant Java api (version jar v3-rev9-1.7.0-beta)API Google Calendars - setTimeMax causant erreur

Ce code fonctionne très bien

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

où service est un objet Calendrier.

Cependant, si j'ajoute un paramètre setTimeMin ou setTimeMax, comme celui-ci

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

renvoie un message d'erreur, "Bad Request".

(à partir de cette version, les fonctions setTime prennent un objet DateTime google J'ai également essayé avec la version précédente du fichier jar, qui prend une chaîne, mais a reçu le même message).

Alors je me demandais si quelqu'un a utilisé avec succès ces fonctions - peut-être qu'elles ne sont pas censées être appelées de cette manière? Existe-t-il un moyen d'obtenir plus de détails sur l'erreur?

Merci :)

Répondre

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

Trie le problème

+0

Savons-nous pourquoi cette méthode fonctionne et non l'original? J'ai eu la même erreur lors de la conversion d'un objet Calendar. – Skepi

3

J'ai également rencontré cela. Il semble que le format des méthodes DateTime.toString() ou DateTime.toStringRfc3339() est incorrect en entrée de setTimeMin().

Le format DateTime.ToString() est la suivante:
2012-07-04T21: 02: 16,590
aaaa-mm-jj'T'HH: mm: ss.sss (notation SimpleDateFormat)

Le format qu'il s'attend à être proche de xsd:datetime format (quel qu'il soit):
2012-07-04T21: 02: 16Z (zulu, gmt)
2012-07-04T21: 02: 16-07: 00 (mst , -7h)
2012-07-04T21: 02: 16-0700 (il fonctionne également sans les deux points dans le fuseau horaire)
aaaa-MM-dd'T'HH: mm: ssZ (SimpleDateFormat)

Mise en forme peut être fait avec un 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(); 

Maintenant, puisque j'utilise l'ancienne API, je ne sais pas comment cela se ferait si la seule méthode est setTimeMin (DateTime), mais cela devrait vous rapprocher.

La documentation ou la source de Google devrait mentionner ceci quelque part.

+0

La documentation ne permet pas. Google semble l'avoir codé comme setTimeMin (DateTime timeMin) et setTimeMax (DateTime timeMax) mais la documentation dit setTimeMin (String timeMin) et setTimeMax (String timeMax) – Skepi