Проблема создания события CalendarContract с временем UTC - PullRequest
0 голосов
/ 15 сентября 2018

Когда я пытаюсь создать событие с помощью приведенного ниже кода, он добавляет событие в календарь, но при этом он не отображает событие с часовым поясом UTC, пока я не перезагружу календарь на Google Calendar app:

ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();

values.put(CalendarContract.Events.ALL_DAY, true);
values.put(CalendarContract.Events.DTSTART, startTime);  //UTC LONG
values.put(CalendarContract.Events.DTEND, endTime + DateUtils.DAY_IN_MILLIS);  // UTC Long
values.put(CalendarContract.Events.EVENT_TIMEZONE, Time.TIMEZONE_UTC);
values.put(CalendarContract.Events.TITLE, title);
values.put(CalendarContract.Events.EVENT_LOCATION, loc);
values.put(CalendarContract.Events.DESCRIPTION, desc);
values.put(CalendarContract.Events.CALENDAR_ID, Long.parseLong(calendarId));
values.put(CalendarContract.Events.EVENT_COLOR, color);
values.put(CalendarContract.Events.HAS_ALARM, true);
values.put(CalendarContract.Events.HAS_ATTENDEE_DATA, true);

cr.insert(CalendarContract.Events.CONTENT_URI.buildUpon()
     .appendQueryParameter(CalendarContract.CALLER_IS_SYNCADAPTER, "true")
     .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_NAME, acc)
     .appendQueryParameter(CalendarContract.Calendars.ACCOUNT_TYPE, typ)
     .build(), values);

Вот вывод события с разницей, когда местным часовым поясом был Лондон:

**Created By GC App:**
     TITLE: by gc app,
     START_DAY: 2458378,
     END_DAY: 2458380,
     START_MINUTE: 0,
     END_MINUTE: 1440, 
     EVENT_TIMEZONE: UTC,
     START: 1537056000000,
     END: 1537315200000

**Created By CalendarContract code:**
     TITLE: by calendarcontract,
     START_DAY: 2458378,
     END_DAY: 2458381,      // different end day
     START_MINUTE: 60,      // different start minute
     END_MINUTE: 60,        // different end minute
     EVENT_TIMEZONE: UTC,   
     START: 1537056000000,  // same start time
     END: 1537315200000     // same end time

Но когда я меняю часовой пояс устройства или обновляю календарь на Google calendar app, он начинает показываться правильно.

...