2016-03-25 108 views
1

我有一些DDay iCal代碼,它從我們的SQL數據庫中接收事件並創建一個iCal文件,以便用戶可以訂閱Outlook或Google日曆中的互聯網日曆。它工作正常,除非用戶在不同的時區同步到他們的日曆時,它會錯誤地顯示時間。我們的網絡服務器處於中心時間,因此東部時間的用戶將在實際活動時間前1小時看到時間。基本上我希望iCal忽略時區,只顯示數據庫中顯示的開始和結束時間。我有一種感覺,這將是不可能的,我們必須自己做時間轉換。Outlook 2010中的DDay 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

由於您正在從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應該能夠處理其餘時間。

我希望這有助於!

+0

雖然這不起作用。我將計算機更改爲東部標準時間,將互聯網日曆同步到Outlook,並且當我運行代碼時,它仍然將時間縮短到Outlook內一小時。我嘗試設置時區,它從來沒有工作。 – GS442

+0

我可能誤解了 - 用戶是否正在執行您編寫的任何代碼,或者他們是否直接從您的代碼已經處理的Outlook約會(或Google日曆約會)中訪問? – Dustin

+0

這意味着一個與Outlook或Google日曆同步的實時iCal供稿。當用戶在Outlook中訂閱Internet日曆時,每5分鐘輪詢一次該頁面以獲得任何可能的更改。 – GS442