我使用“Google.GData.Calendar”API使用c#将事件添加到Google日历。但是在我的数据库和Google日历中创建的事件之间存在时间差异。
以下是使用Google.GData API向Google日历添加活动的代码:
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日历中的条目存在时差。我在谷歌日历中的TimeZone是“(格林威治标准时间-07:00)山地时间 - 亚利桑那州”。当我将Google日历的时区更改为CST,PST,...时,就会发生这种情况。
请为此情况建议解决方法,或在向Google日历添加活动时指定TimeZone。
使用我用来添加活动的完整方法更新了我的问题
答案 0 :(得分:0)
GData库使用了Google API的v2。我认为您需要将代码迁移到v3才能获得对事件时区的适当支持。
例如,请参阅this page,其中显示了创建定期事件的示例。 (切换到“.NET”选项卡“。
以下是一些可以帮助您的资源:
我确实查看了您的代码和v2 GData库的参考指南。我只在CalendarEntry
,EventFeed
和EventQuery
类上看到TimeZone属性。由于你没有使用任何这些,我认为在v2中不可能。
<强>更新强>
v2 API中的可能。您可以在ICAL格式的<gd:recurrence>
标记中传递时区。请查看this documentation中示例后面的注释。
但是,它似乎不会作为.Net GData客户端库中EventEntry
类的属性公开。所以我的推荐是 - 使用v3 api和客户端库。