使用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,…

请为这种情况建议一个解决方案,或者我需要在哪里指定时区,同时添加一个事件到谷歌日历。

用我用来添加事件的完整方法更新了我的问题

使用c#添加Google日历事件时的时差问题

GData库使用v2版本的Google api。我认为您需要将代码迁移到v3,以便获得对事件时区的适当支持。

例如,请参阅本页,该页显示了创建循环事件的示例。(切换到"。净"选项卡"。

这里有一些资源可以帮助你:

  • 迁移指南
  • v3有什么新功能(虽然没有提到时区)
  • 客户端库(参见"。网"选项卡)

我确实看过你的代码和v2 GData库的参考指南。我只在CalendarEntryEventFeedEventQuery类上看到TimeZone属性。既然你没有使用这些,我认为这在v2中是不可能的。

在v2 API中是可能的。您可以在ICAL格式的<gd:recurrence>标记中传递时区。请看一下本文档中示例后面的注释。

然而,它似乎并没有暴露为。net GData客户端库中EventEntry类的属性。所以我的建议是——使用v3 api和客户端库。