2013-05-08 54 views
1

我正在使用「Google.GData.Calendar」API將事件添加到使用c#的Google日曆中。但是在我的數據庫和Google日曆中創建的事件之間存在時間差異。使用C#添加Google日曆事件時存在時差問題

以下是代碼使用Google.GData API的事件添加到谷歌日曆:

public static void AddEventToGoogle() 
{ 
    //string timezone = "US Mountain Standard Time"; 

    Uri postUri = new Uri("https://www.google.com/calendar/feeds/default/private/full"); 
    try 
    { 
     GOAuthRequestFactory authFactory = new GOAuthRequestFactory("cl", "MyApp"); 
     authFactory.ConsumerKey = ConfigurationManager.AppSettings["GConsumerKey"].ToString(); 
     authFactory.ConsumerSecret = ConfigurationManager.AppSettings["GConsumerKeySecret"].ToString(); 
     authFactory.Token = "xxxxxxxxxx"; 
     authFactory.TokenSecret = "xxxxxx"; 
     Google.GData.Calendar.CalendarService service = new Google.GData.Calendar.CalendarService(authFactory.ApplicationName); 
     service.RequestFactory = authFactory; 

     EventEntry entry = new EventEntry(); 
     entry.Title.Text = "Test Google Event Create"; 
     entry.Content.Content = "Test Google Event Create"; 
     entry.Notifications = false; 

     When eventTime = new When(); 
     eventTime.AllDay = false; 
     eventTime.StartTime = new DateTime(2013, 5, 9, 8, 0, 0); 
     eventTime.EndTime = new DateTime(2013, 5, 9, 11, 0, 0); 
     entry.Times.Add(eventTime); 

     // Send the request and receive the response: 
     EventEntry insertedEntry = service.Insert(postUri, entry); 
     if (insertedEntry != null && !string.IsNullOrEmpty(insertedEntry.EventId)) 
     { 
      //Get the insertedEntry.EventId 
     } 
    } 
    catch (GDataRequestException gre) 
    { 
     HttpWebResponse response = (HttpWebResponse)gre.Response; 
    } 
} 

但與上面的代碼有一個與事件的時間差我打算創建,並在入境Google日曆。我在Google日曆中的時區是「(GMT-07:00)Mountain Time - Arizona」。當我將Google日曆的時區更改爲CST,PST時,發生這種情況...

請爲這種情況建議一種解決方法,或者在向Google日曆添加事件時需要指定時區。

更新我有我用來添加事件

+0

你可以發佈你的數據,因爲它發佈到API?我不認爲這是你使用的語言引起的問題。而是日期的格式。從文檔:「時間,作爲組合的日期時間值(根據RFC 3339格式化)。除非時區在'timeZone'中明確指定,否則需要時區偏移。」 – bvstone 2013-05-08 15:12:11

+0

bvstone,請檢查我更新的問題與示例 – Prasad 2013-05-09 05:57:20

回答

0

的的GData庫使用谷歌的API V2的完整方法問題。我認爲您需要將您的代碼遷移到v3以獲得對事件時區的適當支持。

例如,請參閱this page,其中顯示了創建週期性事件的示例。 (切換到 「.NET」 選項卡」

這裏有一些資源,可以幫助你:

我沒看你的代碼和參考指南V2的GData庫。我只看到了TimeZone的性質3210,EventFeedEventQuery類。既然你沒有使用這些,我認爲在第二版中是不可能的。

UPDATE

這是V2 API中可能。您可以在ICAL格式的<gd:recurrence>標記中傳遞時區。查看this documentation中的示例後面的註釋。

但是,它似乎並未在.Net GData客戶端庫中作爲EventEntry類的屬性公開。所以我的建議是 - 使用v3 api和客戶端庫。

+0

馬特,感謝您的更新。我會檢查可用的樣本將V2轉換爲V3。 – Prasad 2013-05-10 10:44:28

+0

@Prasad - 你是否能夠正常工作?這有幫助嗎? – 2013-06-19 23:58:45

相關問題