2013-04-22 153 views
1

我想插入事件谷歌日曆使用谷歌API a3 v3和獲取錯誤在插入過程中。我使用c#。谷歌日曆Api v3 EventDateTime

錯誤:

Google.Apis.Requests.RequestError

Invalid or mismatching start and end times. [400]

Errors [Message[Invalid or mismatching start and end times.] Location[ - ] Reason[invalid] Domain[global]

我對EventDateTime代碼是在這裏。

  EventDateTime EventStartDTime = new EventDateTime(); 
      EventStartDTime.Date = "2013-06-03"; 
      EventStartDTime.DateTime = "2013-06-03T10:00:00.000+05:00"; 
      EventStartDTime.TimeZone = "Asia/Karachi"; 

      EventDateTime EventEndtDTime = new EventDateTime(); 
      EventEndtDTime.Date = "2013-06-05"; 
      EventEndtDTime.DateTime = "2013-06-05T10:00:00.000+05:00"; 
      EventEndtDTime.TimeZone = "Asia/Karachi"; 

任何人都可以幫助我解決這個問題嗎?

回答

2

谷歌日曆V3 API時間戳需要UTC格式,所以你可以提日期時間和時區(可選) 所以你應該提供以下格式,自動進行當前時區:

  DateTime start = DateTime.Now; 
      DateTime end = start + TimeSpan.FromMinutes(30); 

      var curTZone = TimeZone.CurrentTimeZone; 
      var dateStart = new DateTimeOffset(start, curTimeZone.GetUtcOffset(start)); 
      var dateEnd = new DateTimeOffset(end, curTimeZone.GetUtcOffset(end)); 
      var startTimeString = dateStart.ToString("o"); 
      var endTimeString = dateEnd.ToString("o");    

      evnt.Start = new EventDateTime() 
      {      
       DateTime = startTimeString 
      }; 

      evnt.End = new EventDateTime() 
      { 
       DateTime = endTimeString 
      }; 

希望這有助於。

0

閱讀文檔here後,它看起來像您提供的偏移是可選的。從文檔:

start.dateTime | datetime | The time, as a combined date-time value (formatted according to RFC 3339). A time zone offset is required unless a time zone is explicitly specified in 'timeZone'.

嘗試刪除DateTime變量中的偏移量或刪除TimeZone變量。在我使用Python自己的測試中,這對我很有用。我的代碼示例(字典的相關部分):

{ 
    'start': { 
     'dateTime': '2013-06-05T09:00:00', 
     'timeZone': 'Europe/Oslo' 
    }, 
    'end': { 
     'dateTime': '2013-09-T15:30:00', 
      'timeZone': 'Europe/Oslo' 
     }, 
} 

我希望有幫助。

0

在某個時間更新(而不是創建)事件時,指定darthlukan's answer中的時區對我來說不起作用。但是,將DateTimeKind設置爲當地時間確實有效:

DateTime start = DateTime.Now; 
DateTime end = start + TimeSpan.FromMinutes(30); 
start = DateTime.SpecifyKind(start, DateTimeKind.Local); 
end = DateTime.SpecifyKind(end, DateTimeKind.Local); 

Event newEvent = new Event(); 
newEvent.Start = new EventDateTime() { DateTime = start }; 
newEvent.End = new EventDateTime() { DateTime = end };