尝试使用适用于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);