尝试使用适用于Java的Google Calendar API v3创建全天活动会导致错误 [英] Trying to create an all-day event using Google Calendar API v3 for Java causes an error

查看:86
本文介绍了尝试使用适用于Java的Google Calendar API v3创建全天活动会导致错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I can create a timed event using the Java v3 Google Calendar API (as per the sample code on Google's website), but I need to create an all-day event.

我将事件称为setStart()和setEnd(),即

I call the event's setStart() and setEnd(), i.e.

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

这些方法需要和EventDateTime,即

These methods require and EventDateTime, i.e.

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

我使用setDateTime()方法,因为setDate()会导致404错误.

I use the setDateTime() methods as setDate() causes a 404 error.

setDateTime()通过这样做需要com.google.api.client.util.DateTime对象

setDateTime() requires a com.google.api.client.util.DateTime object, by doing

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

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

Passing in the TimeZone gives a time element so it's not an all day event.

我尝试将dateOnly设置为true,但这会出现错误:

I've tried setting dateOnly to true but this gives an error:

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

我无法使用其他创建DateTime的方法来工作: 日期日期,时区区域 长值 日期值 long值,整数tzShift 字符串值

I can't get the other ways of creating DateTime to work: Date date, TimeZone zone long value Date value long value, Integer tzShift String value

我将以哪种方式创建DateTime,并且可以使用setDate(),即新的EventDateTime().setDate(...)?

Which way do I create DateTime and can I use setDate(), i.e. new EventDateTime().setDate(...)?

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

Does anyone have a tested code snippet? Why isn't this documented by Google?

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

ps Interestingly, when reading events from Google, using getDate() causes an exception with timed events and getDateTime() an exception with all-day events. Need to use getDate() for all-day events and getDateTime() for timed events.

推荐答案

固定.

要创建全天事件,必须使用setDate(),该setDate()已使用String(我通过格式化Date对象创建的日期)创建了DateTime对象.代码:

To create an all-day event, you must use setDate() having created DateTime objects using a String (which I created by formatting my Date objects). The code:

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

这篇关于尝试使用适用于Java的Google Calendar API v3创建全天活动会导致错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆