Добавление события в календарь показывает неверную дату окончания
Я хочу добавить событие в календарь программно. Я использую код ниже, чтобы создать и календарь событий.
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());
Надеюсь, это поможет