2013-05-04 17 views
5

我可以使用Java v3 Google Calendar API(根據Google網站上的示例代碼)創建定時事件,但我需要創建一個全天的活動。嘗試使用Google Calendar API v3 for Java創建全天事件會導致錯誤

我所說的事件的setStart()和SETEND(),即

event.setStart(startEventDateTime); 
    event.setEnd(endEventDateTime); 

這些方法需要和EventDateTime,即

EventDateTime startEventDateTime = new EventDateTime().setDateTime(startDateTime); 
    EventDateTime endEventDateTime = new EventDateTime().setDateTime(endDateTime); 

我使用setDateTime()方法,爲的setDate()的原因一個404錯誤。

setDateTime()需要一個com.google.api.client.util.DateTime對象,通過做

DateTime startDateTime = new DateTime(startDate, TimeZone.getTimeZone("UTC")); 
    DateTime endDateTime = new DateTime(endDate, TimeZone.getTimeZone("UTC")); 

在時區傳遞給一個時間元素,所以它不是一個全天事件。

我試過設置dateOnly爲true,但這給出了一個錯誤:

DateTime startDateTime = new DateTime(true, startDate.getTime(), 0); 

我不能讓創建日期時間的其他方式來工作: 日期日期,時區區域 長期價值 日期值 長值,整數tzShift 字符串值

我創建日期時間,我可以使用的setDate(),即新EventDateTime()哪種方式。的setDate(...)?

有沒有人有測試過的代碼片段?爲什麼Google沒有這樣記錄?有趣的是,當從Google讀取事件時,使用getDate()會導致帶有定時事件的異常,而getDateTime()會導致全天事件發生異常。需要將getDate()用於全天事件,getDateTime()用於定時事件。

回答

8

固定。

要創建一個全天事件,您必須使用setDate()創建DateTime對象使用String(我通過格式化我的Date對象創建)。代碼:

Date startDate = new Date(); // Or a date from the database 
    Date endDate = new Date(startDate.getTime() + 86400000); // An all-day event is 1 day (or 86400000 ms) long 

    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 
    String startDateStr = dateFormat.format(startDate); 
    String endDateStr = dateFormat.format(endDate); 

    // Out of the 6 methods for creating a DateTime object with no time element, only the String version works 
    DateTime startDateTime = new DateTime(startDateStr); 
    DateTime endDateTime = new DateTime(endDateStr); 

    // Must use the setDate() method for an all-day event (setDateTime() is used for timed events) 
    EventDateTime startEventDateTime = new EventDateTime().setDate(startDateTime); 
    EventDateTime endEventDateTime = new EventDateTime().setDate(endDateTime); 

    event.setStart(startEventDateTime); 
    event.setEnd(endEventDateTime); 
相關問題