我想以编程方式在日历中添加一个事件。我使用下面的代码来创建和日历事件。
Intent intent = new Intent(Intent.ACTION_EDIT);
intent.setType("vnd.android.cursor.item/event");
intent.putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, DateUtils.getMiliseconds("10/10/2017", "09:02 AM");
intent.putExtra(CalendarContract.EXTRA_EVENT_END_TIME, DateUtils.getMiliseconds("10/13/2017", "05:02 PM"));
intent.putExtra(CalendarContract.Events.TITLE, "my title");
intent.putExtra(CalendarContract.Events.EVENT_LOCATION, "my location" );
startActivity(intent);
此处DateUtils.getMiliseconds
是我的方法。
static long getMiliseconds(String date, String time){
try{
SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy h:mm a");
Date date1 = sdf.parse(date+" "+time);
Calendar cal1 = Calendar.getInstance();
cal1.setTime(date1);
Calendar beginCal = Calendar.getInstance();
beginCal.set(cal1.get(Calendar.YEAR),cal1.get(Calendar.MONTH), cal1.get(Calendar.DAY_OF_MONTH), cal1.get(Calendar.HOUR_OF_DAY), cal1.get(Calendar.MINUTE));
return beginCal.getTimeInMillis();
}
catch (Exception e) {
return new Date().getTime();
}
}
这里,我使用相同的方法来获取开始时间和结束时间的毫秒数。我在日历活动中获得正确的开始时间为10/10/2017 9:02 AM。但结束时间是10月10日10:02 AM而不是10/13/2017 5:02 PM。
我已经尝试过在stackoverflow上可用的解决方案,但没有一个解决方案适合我。
我还尝试传递Events.DTSTART
和Events.DTSTART
而不是EXTRA_EVENT_BEGIN_TIME
和EXTRA_EVENT_END_TIME
,但它也显示错误的日期。
答案 0 :(得分:1)
当我运行getMiliseconds
方法时,它返回的时间(以毫秒为单位)似乎是正确的。这似乎是Google日历的问题,它忽略了endTime
的参数,并使用默认的“startTime
+ 1小时”作为endTime
值。
检查此Google的问题跟踪器:Google Calendar does not respect event start and end times received via intent。似乎问题是由于运行某些版本的Android 5.0的设备的股票日历应用程序中的错误。它适用于Android 4.4.4。
对于他们中的大多数人来说,将应用更新到最新版本可以解决问题,而对于其他人来说,在手机上卸载日历应用程序的更新就可以了。对要测试的设备尝试以上2个选项。希望它有所帮助。
答案 1 :(得分:0)
而不是
Calendar cal1 = Calendar.getInstance();
试一试:
calendar = Calendar.getInstance(TimeZone.getDefault());
希望有所帮助