-1

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

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

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

这是我面临的问题:

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

有时使用 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个时区,我们正在根据它调整活动的开始和结束时间。

请让我知道我必须在哪里进行更改

4

1 回答 1

1

一些东西:

  • 您正在描述 Google 日历,但您显示的代码只是纯粹的DateTime操作。使用显示 Google 日历细节的代码进行更新,或者减少您的问题以匹配您显示的代码。

  • GData 使用已弃用的 Google Calendar API v2。您应该使用当前的 v3。阅读此答案以获取更多详细信息。

  • 您正在构建一个DateTimewith .Kindof Unspecified。当您打电话ToUniversalTime时,它将把开始时间视为本地时间。因此,服务器的时区正在逐渐影响您的计算。

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

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

于 2013-06-19T23:57:13.507 回答