1

我有一些 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
4

1 回答 1

0

由于您从 SQL 数据库中获取时间,因此不太可能存在与您提取的时间相关联的时区。您可能需要将拉动的时间分配给“中央标准时间”,如下所示:

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 应该能够处理其余部分。

我希望这有帮助!

于 2016-03-26T01:17:19.750 回答