尝试使用Google Calendar API v3 for Java创建全天事件会导致错误

尝试使用Google Calendar API v3 for Java创建全天事件会导致错误,java,google-calendar-api,Java,Google Calendar Api,我可以使用JavaV3GoogleCalendarAPI创建一个定时事件(根据Google网站上的示例代码),但我需要创建一个全天事件 我调用事件的setStart()和setEnd(),即 这些方法需要和EventDateTime,即 EventDateTime startEventDateTime = new EventDateTime().setDateTime(startDateTime); EventDateTime endEventDateTime = new Eve

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

我调用事件的setStart()和setEnd(),即

这些方法需要和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); 
我无法获得创建DateTime的其他方法: 日期,时区 长期价值 日期值 长值,整数移位 字符串值

我用哪种方法创建日期时间?我可以使用setDate(),即new EventDateTime()。setDate(…)

有人有经过测试的代码段吗?为什么谷歌没有对此进行记录

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

已修复

要创建全天事件,必须使用setDate()并使用字符串(我通过格式化日期对象创建的字符串)创建日期时间对象。守则:

    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);

这里的关键技巧是使用构造函数并指定一个没有时间和偏移量的字符串(例如:“2018-07-30”)
    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);