Android日历字段日期异常:添加事件时设置与显示日期不符
解决日历事件日期显示不一致的问题
兄弟,我太懂这个坑了!你遇到的日期不一致问题,根源就在Calendar类的月份计数规则上——Android里的Calendar月份是从0开始的!你代码里写的05其实对应的是6月,而不是你想要的5月,这就导致实际显示的日期和预期对不上啦。
另外还要提一句,你原来的代码里只设置了事件标题,没把时间数据传递给Intent,就算月份对了,系统也没法识别你要设置的事件时间哦。给你整理了修正后的完整代码:
eventButton.setOnClickListener(new Button.OnClickListener() { @Override public void onClick(View v) { Calendar time = Calendar.getInstance(); time.clear(); // 敲黑板:Calendar的月份从0开始,04才代表5月! time.set(2018, 04, 23); // 将日历时间转为毫秒值,用于传递给Intent long startTime = time.getTimeInMillis(); // 可以给事件设置结束时间,比如持续1小时 time.add(Calendar.HOUR_OF_DAY, 1); long endTime = time.getTimeInMillis(); Intent calendarIntent = new Intent(Intent.ACTION_EDIT); calendarIntent.setType("vnd.android.cursor.item/event"); calendarIntent.putExtra(CalendarContract.Events.TITLE, "Wh..."); // 传递事件的开始和结束时间,这一步必不可少 calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, startTime); calendarIntent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, endTime); // 别忘了启动Intent,不然点击按钮没反应哦 startActivity(calendarIntent); } });
再给你补充几个注意点:
- 如果你需要指定时区,可以加上这行代码,避免不同时区下的时间偏差:
calendarIntent.putExtra(CalendarContract.Events.EVENT_TIMEZONE, TimeZone.getDefault().getID()); - Android 6.0(API 23)及以上版本,需要动态申请
READ_CALENDAR和WRITE_CALENDAR权限,不然会有权限异常。
内容的提问来源于stack exchange,提问作者UsmanSanawar
相关产品推荐
相关产品推荐

