我在我的安卓日历中插入事件。代码如下:
ContentValues event = new ContentValues();
event.put("calendar_id", calId);
event.put("title", "Event Title");
event.put("description", "Event Desc");
event.put("eventLocation", "Event Location");
event.put("allDay", 1);
event.put("eventStatus", 1);
event.put("visibility", 0);
event.put("transparency", 0);
event.put("hasAlarm", 1);
Date d = new Date();
d.setHours(8);
d.setMinutes(30);
d.setSeconds(30);
long startTime = d.getTime();
d.setHours(12);
d.setMinutes(30);
d.setSeconds(20);
long endTime = d.getTime();
event.put("dtstart", startTime);
// event.put("dtend", endTime);
event.put("rrule", "FREQ=DAILY;WKST=SU");
// event.put("lastDate", endTime);
// event.put("timezone", "Asia/Karachi");
//event.put("duration", "P3600S");
//Calendar gmtC = new GregorianCalendar(TimeZone.getTimeZone("Asia/Karachi"));
// event.put("transparency", 0);
// event.put("hasAlarm", 1); // 0 for false, 1 for true
Uri eventsUri = Uri.parse("content://calendar/events");
Uri url = getContentResolver().insert(eventsUri, event);
我收到以下异常:
java.lang.IllegalArgumentException: allDay is true but sec, min, hour are not 0.
需要帮助!
答案 0 :(得分:4)
我遇到了同样的问题,即使将小时,分钟和秒设置为0.然后我发现,对于allday事件,时间必须以UTC设置。这意味着,您需要将日历时区的UTC偏移量添加到您的allday事件开始时间。
例如:(时区和startTime仅为简化目的而硬编码!)
// You should write a method to get the calendar's timezone through a query
String calendarTimezone = "CET";
// Start time of the event. Hours, minutes and seconds have to be 0.
long startTime = 1315087200000L; // equals 2011-09-04 00:00:00
// Get UTC offset for the given timezone and start time. This way DST is accounted for.
int timeZoneOffset = TimeZone.getTimeZone(calendarTimezone).getOffset(startTime);
// Set same time for start and end of the allday event. Add UTC offset.
event.put("dtstart", startTime + timeZoneOffset);
event.put("dtend", startTime + timeZoneOffset);
event.put("allDay", 1);
答案 1 :(得分:1)
日历GData API定义一个全天事件,其开始时间仅为日期,以及事件结束后一天的结束时间。
这是发送到Google数据API的数据
<entry xmlns='http://www.w3.org/2005/Atom'
xmlns:gd='http://schemas.google.com/g/2005'>
<category scheme='http://schemas.google.com/g/2005#kind'
term='http://schemas.google.com/g/2005#event'></category>
<title type='text'>Word of the Day</title>
<gd:when startTime='2007-07-17'
endTime='2007-07-18'></gd:when>
</entry>
请注意,开始/结束时间中不包含任何时间信息。
你不能有一整天不在午夜开始的活动。这就是你得到例外的原因。在一整天的活动中,小时,分钟,秒必须为0。
你可以尝试另一个论坛,但你总会得到这个答案,因为这就是GData API的工作方式。
答案 2 :(得分:1)
如果allDay设置为1,则eventTimezone必须为TIMEZONE_UTC且时间必须对应午夜边界,则表示小时,分钟,秒应为日历对象的零。
参考以下链接..
http://developer.android.com/reference/android/provider/CalendarContract.Events.html
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.set(2014, 03, 18, 0, 0,0);
答案 3 :(得分:0)
您将“allDay”指定为true,但您设置的时间为秒,分和小时。对于系统而言,这意味着它不是一整天...尝试删除allDay或时间设置。也许这些是相反和矛盾的。
答案 4 :(得分:0)
Calendar cal = Calendar.getInstance();
cal.setTime(date);
cal.set(Calendar.HOUR, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.setTimeZone(TimeZone.getTimeZone("UTC"));
long dtstart = cal.getTimeInMillis();
builder.withValue(Events.DTSTART, dtstart);