Как я могу установить часовой пояс как нулевой в интеграции с календарем Google?

#c# #asp.net-mvc #google-calendar-api #google-api-dotnet-client

#c# #asp.net-mvc #google-calendar-api #google-api-dotnet-client

Вопрос:

Я написал код в ASP.NET MVC, который интегрируется с Google calendar API и устанавливает событие в календарь пользователя. Мой код :

  public static string CreateEvent(CalendarEventViewModel model)
        {
            string Id = "";
            // List events.
            Event newEvent = new Event()
            {
                Summary = model.Summary,
                Location = model.Location,
                Description = model.Description,
                Start = new EventDateTime()
                {
                    DateTime = DateTime.Parse(model.StartDateTime),
                    TimeZone = "America/Los_Angeles",
                },
                End = new EventDateTime()
                {
                    DateTime = DateTime.Parse(model.EndDateTime),
                    TimeZone = "America/Los_Angeles",
                },
                Recurrence = new String[] { "RRULE:FREQ=DAILY;COUNT=1" },
                Attendees = new EventAttendee[] 
                {
                     new EventAttendee() { Email = model.CompanyEmailAddress },
                },
                Reminders = new Event.RemindersData()
                {
                    UseDefault = false,
                    Overrides = new EventReminder[] 
                    {
                        new EventReminder() { Method = "email", Minutes = 24 * 60 },
                        new EventReminder() { Method = "sms", Minutes = 10 },
                    }
                }
            };

            String calendarId = "primary";
            if (model.IsInsert)
            {
              Event createdEvent =   SharedService.service.Events.Insert(newEvent, calendarId).Execute();
              Id = createdEvent.Id;
            }
            else
            {
                SharedService.service.Events.Update(newEvent, calendarId, model.Id).Execute();
                Id = "";
            }
            return Id;
        }
  

Это работает отлично, но здесь мне нужно удалить часовой пояс или установить для него значение null TimeZone = "America/Los_Angeles", , потому что часовой пояс администратора и пользователя разные. Например: — Если администраторы установили событие на 5:00 утра, то время для событий в календаре Google пользователя также должно быть 5:00 утра из-за того, что часовой пояс в настоящее время отличается. Как я могу это сделать?

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

Комментарии:

1. Дело в том, что события IIR по умолчанию вставляются в часовой пояс самого календаря. Итак, если администратор хочет добавить событие в календарь пользователей на 5 часов утра по времени пользователей, тогда оно должно быть вставлено по умолчанию в календарь пользователей в 5 часов утра. Однако, если администратор хочет вставить событие в 5 утра по времени Америки / Лос-Анджелеса, им нужно будет добавить часовой пояс, а затем он будет преобразован в это время в календаре пользователей.

2. @DaImTo В настоящее время администратор добавляет время в 8:00 — 11:00 утра, но в календаре пользователя оно отображается с 2:00 до 5:00 вечера, в чем причина этого?

3. @DaImTo Я думаю, поскольку его разработка ведется в Непале, а его живой сервер находится в США, разница во времени составляет 5:45 по Гринвичу. Должен ли я изменить часовой пояс в приложении Google Calendar, и он будет работать? или мне нужно что-то еще для этого.

4. Привет, я опубликовал ответ. Дайте мне знать, если это ответит на ваш вопрос или если вам нужны дополнительные указания.

5. @DaImTo я только что понял, что часовой пояс в событии « (TimeZone = «America / Los_Angeles») « не работает. Выбранный часовой пояс является часовым поясом по умолчанию для местоположения, в котором размещен сервер. Например: — Если я запускаю его из Непала (GMT 5:45) в своей разработке, то часовой пояс календаря равен GMT 5:45 аналогично, если я запускаю его с размещенного сервера (GMT 0:00), тогда часовой пояс календаря равен (GMT 0:00). Пожалуйста, помогите, почему это происходит.

Ответ №1:

Проблема:

Вам нужно указать часовой пояс, либо в start.dateTime , либо в start.timeZone . Из документов API:

start.DateTime: время в виде комбинированного значения даты и времени (отформатированного в соответствии с RFC3339). Смещение часового пояса требуется, если часовой пояс явно не указан в timeZone .

Объяснение:

Часовой пояс необходим для указания конкретной даты и времени для события. Он указывает, к какому часовому поясу относится дата-время. Например, допустим, время 5:00 AM . 5:00 утра, где? В Лос-Анджелесе? В Непале? 5:00 утра в Лос-Анджелесе — это не то же время, что 5:00 утра в Непале. И конкретное событие может начаться только в определенное время. Если он начинается в 5:00 утра в Лос-Анджелесе, он начинается (я думаю) в 5:45 вечера в Катманду. У вас не может быть определенного события, начинающегося одновременно в 5:00 утра в Лос-Анджелесе и в Катманду: это два разных времени!

Итак, следующее невозможно. Если два пользователя (и их календари) находятся в разных часовых поясах, определенное событие будет отображаться в разное время:

Например: — Если администраторы установили событие на 5:00 утра, то время для событий в календаре Google пользователя также должно быть 5:00 утра из-за того, что часовой пояс в настоящее время отличается.

Конечно, вы всегда можете изменить часовой пояс для своего календаря (см. Раздел Change the time zone of one calendar Здесь ), но это не изменит фактическое время начала события; он просто покажет время начала в другом часовом поясе. Событие, начинающееся в 5:00 утра по Лос-Анджелесскому времени, все равно начнется в 5:45 вечера по непальскому времени.

Если вы действительно хотите, чтобы событие начиналось в 5:00 утра как по времени Лос-Анджелеса, так и по времени Катманду, вам придется создать два разных события.

Комментарии:

1. Я действительно не хочу запускать оба события в 5:00 утра. На самом деле я хочу установить часовой пояс для пользователей. Например, если я из Лос-Анджелеса выбираю время как 5.00 утра и отправляю приглашение на мероприятие в Непал, тогда время должно быть 5.00 утра по часовому поясу Непала. Мне все равно, какой часовой пояс установлен в календаре Лос-Анджелеса

2. В настоящее время часовой пояс = «Америка / Лос_Ангелес» не просто работает. Часовой пояс выбирается из электронного письма, на которое будет отправлено приглашение на мероприятие.

3. @BirazDahal Итак, вы хотите установить часовой пояс для конкретного участника? Для получения этой информации вам потребуется доступ к календарю участников. У вас есть этот доступ? Участник поделился с вами календарем?

4. Да, у меня есть часовой пояс для конкретного участника, сохраненный в базе данных. но у меня нет доступа к использованию календаря. Предположим, мне нужно отправить его трем пользователям A, B и C. У меня есть часовой пояс, такой как US / Central, US / Mountain, US / pacific для каждого конкретного человека. Можно ли это сделать с этой информацией?

5. @BirazDahal Я не понимаю вашего запроса. Вы хотите, чтобы у вас было три участника, каждый из которых находится в другом часовом поясе. Но дата-время события может быть только одним. Каждый участник увидит событие в собственном часовом поясе своего календаря, нет необходимости указывать часовой пояс для каждого из них. Можете ли вы уточнить это?