我有一些DDay iCal代码,它从我们的SQL数据库中获取事件,并创建一个iCal文件,以便用户可以订阅Outlook或Google中的互联网日历。它正常工作,除非处于不同时区的用户与他们的日历同步,它不正确地显示时间。我们的web服务器处于中心时间,因此东部时间的用户将看到实际事件时间前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发布于 2016-03-26 01:17:19
由于您是从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应该能够在不同时区的用户读取日历约会时处理其余的内容。
我希望这能帮到你!
https://stackoverflow.com/questions/36229146
复制相似问题