向日历添加事件会显示错误的结束日期

时间:2017-10-11 17:14:03

标签: android datetime android-calendar

我想以编程方式在日历中添加一个事件。我使用下面的代码来创建和日历事件。

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.DTSTARTEvents.DTSTART而不是EXTRA_EVENT_BEGIN_TIMEEXTRA_EVENT_END_TIME,但它也显示错误的日期。

2 个答案:

答案 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());

希望有所帮助