2013-06-17 3 views
-1

Я создал приложение ASP.net, и я использую Google Calendar API (Google.GData.Calendar) для планирования/добавления события в календарь Google.Событие не добавляется в нужное время в календаре Google

FYI, мой клиент из Южной Австралии, и мой сайт размещен на сервере Godaddy India.

В Австралии с октября по апрель - это летнее время. (Южная Австралия (SA):.. Первое воскресенье в октябре первое воскресенье в апреле Ранее наблюдали DST в 1917 и 1942-1944 годы С 1971 использует это регулярно)

Вот проблема я столкнулся:

Когда я добавляю событие с сайта, из Индии, событие добавляется в одно и то же время без каких-либо изменений даже в летние дни. Но когда мой клиент добавляет событие, из Южной Австралии, то событие добавляется на час раньше. Например. Если время события равно 10 AM-11AM, то это будет 9 AM-10AM.

Иногда событие добавляется в нужное время из Южной Австралии, используя iPad/Tab/некоторые другие ПК.

Вот мой код события:

var startHour = new DateTime(dtstartdatetime.Year, dtstartdatetime.Month, dtstartdatetime.Day, startTime.Hours, startTime.Minutes, 00).ToUniversalTime().AddHours(-7); 
var startHour1 = new DateTime(dtstartdatetime.Year, dtstartdatetime.Month, dtstartdatetime.Day, endTime.Hours, endTime.Minutes, 00).ToUniversalTime().AddHours(-7); 

Австралия имеет 6 часовых пояса, и мы корректируем начать событие и время окончания в соответствии с ним.

Пожалуйста, дайте мне знать, где я делать изменения

ответ

0

несколько вещей:

  • Вы описываете Google Calendar, но код вы показываете только чисто DateTime манипуляции. Или обновите код, показывающий специфику Календаря Google, или уменьшите свой вопрос в соответствии с отображаемым кодом.

  • GData использует v2 API-интерфейса Google Calendar, который устарел. Вы должны использовать текущий v3. Прочтите this answer для более подробной информации.

  • Вы строите DateTime с .Kind от Unspecified. Когда вы вызываете ToUniversalTime, который будет обрабатывать начальное время, как если бы оно было локальным. Таким образом, часовой пояс сервера приближается к вашим расчетам.

  • Вы, кажется, знаете о 6 часовых поясах и правилах летнего времени, но затем вы просто добавляете жестко закодированные -7 часов. Это неправильный способ определить часовой пояс или настроить его. Go читать около TimeZoneInfo и DateTimeOffset.

  • Возможно, вы захотите рассмотреть возможность использования Noda Time - что может помочь, поскольку в Календаре Google используются идентификаторы IANA time zone.

Смежные вопросы