使用c#添加Google日历事件时的时差问题
本文关键字:时差 问题 事件 日历 添加 Google 使用 | 更新日期: 2023-09-27 18:12:30
我使用"Google.GData "。使用c#将事件添加到Google日历的API。但是在我的数据库和谷歌日历中创建的事件之间存在时间差。
下面是使用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 Calendar中的条目之间存在时间差。我的Google日历上的时区是"(GMT-07:00)山地时间-亚利桑那州"。这是发生当我改变我的谷歌日历时区CST, PST,…
请为这种情况建议一个解决方案,或者我需要在哪里指定时区,同时添加一个事件到谷歌日历。
用我用来添加事件的完整方法更新了我的问题
GData库使用v2版本的Google api。我认为您需要将代码迁移到v3,以便获得对事件时区的适当支持。
例如,请参阅本页,该页显示了创建循环事件的示例。(切换到"。净"选项卡"。
这里有一些资源可以帮助你:
- 迁移指南
- v3有什么新功能(虽然没有提到时区)
- 客户端库(参见"。网"选项卡)
我确实看过你的代码和v2 GData库的参考指南。我只在CalendarEntry
、EventFeed
和EventQuery
类上看到TimeZone属性。既然你没有使用这些,我认为这在v2中是不可能的。
在v2 API中是可能的。您可以在ICAL格式的
<gd:recurrence>
标记中传递时区。请看一下本文档中示例后面的注释。
然而,它似乎并没有暴露为。net GData客户端库中EventEntry
类的属性。所以我的建议是——使用v3 api和客户端库。