Добавление события в календарь показывает неверную дату окончания

Я хочу добавить событие в календарь программно. Я использую код ниже, чтобы создать и календарь событий.

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. Но время окончания 10.10.2017 10:02 вместо 13.10.2017 17:02.

Я пробовал решения для стека, доступные далеко, но ни одно из решений не работает для меня.

Я тоже пробовал проходить Events.DTSTART а также Events.DTSTART вместо EXTRA_EVENT_BEGIN_TIME а также EXTRA_EVENT_END_TIME но это показывает неверную дату тоже.

2 ответа

Решение

Когда я управляю твоим getMiliseconds метод, время в миллисекундах, которое он возвращает, кажется правильным. Это похоже на проблему, когда Календарь Google, где он игнорирует ваш параметр для endTime и используя по умолчанию startTime + 1 час "как то endTime значение.

Проверьте это средство отслеживания проблем Google: Календарь Google не учитывает время начала и окончания события, полученные с помощью намерения. Похоже, что проблема была из-за ошибки в приложении "Стандартный календарь" для устройств, работающих под управлением какой-либо версии Android 5.0. Работало нормально для Android 4.4.4.

Для большинства из них обновление приложения до последней версии устранило проблему, а для других удаление обновлений для приложения-календаря на вашем телефоне - это нормально. Попробуйте 2 вышеуказанные опции для устройства, на котором вы тестируете. Надеюсь, поможет.

Вместо

Calendar cal1 = Calendar.getInstance();

Попытайся:

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

Надеюсь, это поможет

Другие вопросы по тегам