При добавлении события в календарь отображается неправильное время, но при сохранении оно является правильным - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть кнопка, чтобы добавить событие в календарь.Код работает, событие добавляется правильно, но когда отображается событие календаря для сохранения, время отображается неправильно.Событие с 4 до 6 вечера, в календаре добавления события отображается 12:00 - 14:00, что явно является проблемой часового пояса, но при сохранении события (без изменения времени) оно отображается правильно с 4 до 6 вечера.

Это код иснимки экрана с добавлением события и результата:

Intent eventValues = new Intent(Intent.ActionInsert);
eventValues.SetData(CalendarContract.Events.ContentUri);
eventValues.SetType("vnd.android.cursor.item/event");

eventValues.PutExtra(CalendarContract.Events.InterfaceConsts.Title, "Event Title");
eventValues.PutExtra(CalendarContract.Events.InterfaceConsts.Description, "Event Description");
eventValues.PutExtra(CalendarContract.ExtraEventBeginTime, GetDateTimeMS(2019, 3, 12, 16, 0));
eventValues.PutExtra(CalendarContract.ExtraEventEndTime, GetDateTimeMS(2019, 3, 12, 18, 0));
eventValues.PutExtra(CalendarContract.Events.InterfaceConsts.EventTimezone, "America/New_York");
eventValues.PutExtra(CalendarContract.Events.InterfaceConsts.EventEndTimezone, "America/New_York");
eventValues.PutExtra(CalendarContract.Events.InterfaceConsts.EventLocation, "Event Location");

StartActivity(eventValues);

Добавление события: enter image description here

Результат: enter image description here

Есть идеи, как заставить это отображать правильное время?

ОБНОВЛЕНИЕ

Не обращайте на это внимания, проблема заключалась в функции GetDateTimeMS, которую я получил из Xamarin Docs.Мне пришлось изменить часовой пояс по умолчанию на фактический TZ:

long GetDateTimeMS(int yr, int month, int day, int hr, int min)
{
    //Calendar c = Calendar.GetInstance(Java.Util.TimeZone.Default);
    Calendar c = Calendar.GetInstance(Java.Util.TimeZone.GetTimeZone("America/New_York"));

    c.Set(Java.Util.CalendarField.DayOfMonth, day);
    c.Set(Java.Util.CalendarField.HourOfDay, hr);
    c.Set(Java.Util.CalendarField.Minute, min);
    c.Set(Java.Util.CalendarField.Month, month);
    c.Set(Java.Util.CalendarField.Year, yr);

    return c.TimeInMillis;
}

1 Ответ

0 голосов
/ 10 апреля 2019

Проблема была в функции GetDateTimeMS, которую я получил из Xamarin Docs.Мне пришлось изменить часовой пояс по умолчанию на фактический TZ:

long GetDateTimeMS(int yr, int month, int day, int hr, int min)
{
    //Calendar c = Calendar.GetInstance(Java.Util.TimeZone.Default);
    Calendar c = Calendar.GetInstance(Java.Util.TimeZone.GetTimeZone("America/New_York"));

    c.Set(Java.Util.CalendarField.DayOfMonth, day);
    c.Set(Java.Util.CalendarField.HourOfDay, hr);
    c.Set(Java.Util.CalendarField.Minute, min);
    c.Set(Java.Util.CalendarField.Month, month);
    c.Set(Java.Util.CalendarField.Year, yr);

    return c.TimeInMillis;
}
...