6

我可以使用 Java v3 Google Calendar API(根据 Google 网站上的示例代码)创建一个定时事件,但我需要创建一个全天事件。

我调用事件的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"));

传入 TimeZone 会给出一个时间元素,因此它不是一整天的事件。

我尝试将 dateOnly 设置为 true 但这会产生错误:

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

我无法使用其他创建 DateTime 的方法:日期日期、时区长值日期值长值、整数 tzShift 字符串值

我用哪种方式创建 DateTime,我可以使用 setDate(),即 new EventDateTime().setDate(...)?

有人有测试过的代码片段吗?为什么谷歌没有记录这一点?

ps 有趣的是,当从 Google 读取事件时,使用 getDate() 会导致定时事件异常,而 getDateTime() 会导致全天事件异常。需要将 getDate() 用于全天事件,将 getDateTime() 用于定时事件。

4

1 回答 1

13

固定的。

要创建全天事件,您必须使用 setDate() 并使用 String (我通过格式化 Date 对象创建)创建 DateTime 对象。编码:

    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);
于 2013-05-07T11:52:56.807 回答