事件未在Google日历中添加正确的时间

时间:2013-06-17 15:19:48

标签: c# asp.net timezone google-calendar-api dst

我创建了一个ASP.net应用程序,我正在使用Google Calendar API(Google.GData.Calendar)在Google日历中安排/添加活动。

仅供参考,我的客户来自南澳大利亚,我的网站托管在Godaddy India服务器上。

澳大利亚从10月到4月是夏令时。 (南澳大利亚州(SA):10月的第一个星期日4月的第一个星期日早些时候在1917年和1942年至1944年期间观察到夏令时。自1971年以来经常使用它。)

这是我面临的问题:

当我从网站添加来自印度的活动时,即使在夏令时,也会同时添加活动而不会有任何变化。但是当我的客户从南澳大利亚添加一个活动时,事件又提前了一个小时。例如。如果活动时间是上午10点到11点,那么它将是上午9点到10点。

有时,使用iPad / Tab /其他PC从南澳大利亚正确地添加活动。

以下是我的活动代码:

var startHour = new DateTime(dtstartdatetime.Year, dtstartdatetime.Month, dtstartdatetime.Day, startTime.Hours, startTime.Minutes, 00).ToUniversalTime().AddHours(-7);
var startHour1 = new DateTime(dtstartdatetime.Year, dtstartdatetime.Month, dtstartdatetime.Day, endTime.Hours, endTime.Minutes, 00).ToUniversalTime().AddHours(-7);

澳大利亚有6个时区,我们正在调整事件的开始和结束时间。

请让我知道我要做哪些更改

1 个答案:

答案 0 :(得分:1)

一些事情:

  • 您正在描述Google日历,但您展示的代码只是纯粹的DateTime操作。可以使用显示Google日历详细信息的代码进行更新,也可以根据您显示的代码缩小问题。

  • GData使用已被弃用的Google Calendar API的v2。您应该使用当前的v3。请阅读this answer了解详情。

  • 您正构建DateTime .Kind Unspecified。当您致电ToUniversalTime时,将把起始时间视为本地时间。所以服务器的时区正在计算中。

  • 您似乎知道6个时区和夏令时规则,但之后只需添加硬编码-7小时。这不是确定时区或调整时区的正确方法。请阅读TimeZoneInfoDateTimeOffset

  • 您可能需要考虑使用Noda Time - 这可能会有所帮助,因为Google日历会使用IANA time zone个标识符。