Добавление события в календарь отображает неправильное время, но при сохранении время указано правильно

#android #xamarin.android #calendar #android-calendar

#Android #xamarin.android #Календарь #android-календарь

Вопрос:

У меня есть кнопка для добавления события в календарь. Код работает, событие добавляется правильно, но когда событие календаря отображается для сохранения, время отображается неправильно. Событие происходит с 4 до 6 вечера, событие добавления календаря отображается с 12 до 2 часов дня, что явно связано с проблемой часового пояса, но когда событие сохраняется (без изменения времени), оно отображается правильно с 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);
  

Добавить событие:
введите описание изображения здесь

Результат: введите описание изображения здесь

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

Обновить

Неважно, проблема заключалась в функции GetDateTimeMS, которую я получил из документов Xamarin. Мне пришлось изменить часовой пояс с стандартного на фактический 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. Вы проверяли DateTime вид перед вводом значения в календаре?

2. Извините, я не понимаю, что вы имеете в виду?

3. У вас должен быть DateTime объект, верно? проверьте, что это за событие!!

4. Я не знаю, если вы говорите о GetDateTimeMS, то есть о времени в миллисекундах, оно взято из документов Xamarin. Я добавлю функцию к вопросу.

Ответ №1:

Проблема заключалась в функции GetDateTimeMS, которую я получил из документов Xamarin. Мне пришлось изменить часовой пояс с стандартного на фактический 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;
}