我有一些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
答案 0 :(得分: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应该能够处理其余时间。
我希望这有帮助!