将事件添加到日历显示错误的结束日期

Adding event to calendar shows wrong end date

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

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/2017 10:02 AM 而不是 10/13/2017 5:02 PM。

我已经尝试了 Whosebug 上可用的解决方案,但 none 的解决方案对我有用。

我也尝试传递 Events.DTSTARTEvents.DTSTART 而不是 EXTRA_EVENT_BEGIN_TIMEEXTRA_EVENT_END_TIME 但它也显示错误的日期。

而不是

Calendar cal1 = Calendar.getInstance();

试一试:

calendar = Calendar.getInstance(TimeZone.getDefault());

希望对您有所帮助

当我 运行 您的 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。

对于他们中的大多数人来说,将应用程序更新到最新版本可以解决问题,而对于其他人来说,卸载 phone 上日历应用程序的更新就可以了。为您正在测试的设备尝试上述 2 个选项。希望对你有帮助。