DDay iCal 在 Outlook 2010 中更改时间

DDay iCal changing time in Outlook 2010

我有一些 DDay iCal 代码可以从我们的 SQL 数据库中获取事件并创建一个 iCal 文件,这样用户就可以在 Outlook 或 Google 日历中订阅互联网日历。它工作正常,除非当不同时区的用户同步到他们的日历时,它会错误地显示时间。我们的网络服务器采用中部时间,因此东部时间的用户会看到时间比实际事件时间早 1 小时。基本上,我希望 iCal 忽略时区,只显示出现在我的数据库中的开始和结束时间。我有预感这是不可能的,我们必须自己进行时间转换。

Dim iCal As iCalendar = New iCalendar()
Dim evt As [Event]
iCal.AddLocalTimeZone()
Dim dtStart As DateTime = dtr_SQL("StartDate").ToString()
Dim dtEnd As DateTime = dtr_SQL("EndDate").ToString()
Dim startDate As iCalDateTime = dtStart.ToUniversalTime()
Dim endDate As iCalDateTime = dtEnd.ToUniversalTime()
evt = iCal.Create(Of [Event])()
evt.Start = startDate
evt.Start.HasTime = True
evt.Start.IsUniversalTime = True
evt.End = endDate
evt.End.HasTime = True
evt.End.IsUniversalTime = True

由于您是从 SQL 数据库获取时间,因此不太可能存在与您提取的时间相关联的时区。您可能需要将拉动的时间分配给 "Central Standard Time",如下所示:

Dim centralTime As New Date(dtStart)  'using the datetime you pulled from your database
Dim centralZoneId As String = "Central Standard Time"
Dim centralZone As TimeZoneInfo = TimeZoneInfo.FindSystemTimeZoneById(centralZoneId)
Dim UTCTime as Date = TimeZoneInfo.ConvertTimeToUtc(centralTime, centralZone)

现在,如果东部标准时间的用户正在执行您的代码,时间将从数据库中读取为 CST(不是 EST,这很可能是您的问题所在),然后转换为 UTC。有了与这些时间相关联的明确时区,当不同时区的用户阅读您的日历约会时,Outlook 和 Google 应该能够处理其余时间。

希望对您有所帮助!