我创建了一个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个时区,我们正在调整事件的开始和结束时间。
请让我知道我要做哪些更改
答案 0 :(得分:1)
一些事情:
您正在描述Google日历,但您展示的代码只是纯粹的DateTime
操作。可以使用显示Google日历详细信息的代码进行更新,也可以根据您显示的代码缩小问题。
GData使用已被弃用的Google Calendar API的v2。您应该使用当前的v3。请阅读this answer了解详情。
您正构建DateTime
.Kind
Unspecified
。当您致电ToUniversalTime
时,将把起始时间视为本地时间。所以服务器的时区正在计算中。
您似乎知道6个时区和夏令时规则,但之后只需添加硬编码-7
小时。这不是确定时区或调整时区的正确方法。请阅读TimeZoneInfo
和DateTimeOffset
。
您可能需要考虑使用Noda Time - 这可能会有所帮助,因为Google日历会使用IANA time zone个标识符。