我创建了一个ASP.net应用程序,我正在使用谷歌日历API (Google. gdata .Calendar)来计划/添加谷歌日历中的事件。
仅供参考,我的客户来自南澳大利亚,我的网站托管在Godaddy印度服务器上。
在澳大利亚从10月到4月是夏令时。南澳大利亚(SA): 10月的第一个星期日4月的第一个星期日早于1917年和1942-1944年实行夏时制。)
这是我面临的问题:
当我从印度站点添加事件时,事件会在同一时间添加,即使在夏令时也没有任何变化。但是当我的客户从南澳大利亚加入一个活动时,活动提前了一个小时。例:如果事件时间是10AM-11AM,那么它将是9AM-10AM。
有时事件添加正确的时间从南澳大利亚使用iPad/Tab/其他一些电脑。
下面是我的事件代码:
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个时区,我们正在据此调整活动的开始和结束时间。
请告诉我哪里需要修改
几点:
-
你正在描述谷歌日历,但你显示的代码只是纯粹的
DateTime
操作。要么更新显示Google日历细节的代码,要么减少你的问题以匹配你正在显示的代码。 -
GData使用Google Calendar API的v2版本,该API已被弃用。你应该使用当前的v3。
-
你正在用
Unspecified
的.Kind
构建DateTime
。当您调用ToUniversalTime
时,它将把开始时间视为本地时间。所以服务器的时区会潜入到你的计算中。 -
你似乎知道6个时区和夏令时规则,但你只是添加了一个硬编码的
-7
小时。这不是确定时区或调整时区的正确方法。去阅读TimeZoneInfo
和DateTimeOffset
。 -
您可以考虑使用Noda时间-这可能会有所帮助,因为谷歌日历使用IANA时区标识符。