我有一個頁面可生成vCal和iCal文件,以將事件導入到Outlook和iCal中。這些郵件客戶端(Outlook & iCal)將採用UTC的日期,因爲他們知道用戶的偏移量並將處理正確的時間。我們正在編寫此代碼的客戶端基於美國東部時區,我也是如此。他們的主機位於中部時區(距東部1小時)。我想讓代碼處理這個沒有任何硬編碼的偏移量。我的代碼目前從我們的CMS獲取DateTime,並轉換爲UTC/Outlook。這意味着從CMS DateTime值是相對於主機的位置:將日期時間偏移量應用於美國東部時區
// Start Date Time
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
當我在我的本地運行此,這一切都很好,因爲在CMS的日期時間是基於我們客戶的東部時區等是我,所以這個過程是東方 - > UTC - >進入Outlook,然後去UTC - >東部,一切都很好。當我部署到Central的服務器時,CMS的DateTime距離東部一小時。我如何自動從東部獲得偏移量並在轉換爲UTC之前添加它?我顯然需要這個來處理標準時間(EST)和日光時間(EDT)。我希望以編程方式進行編程,而不使用硬編碼值,因此無論您處於什麼時區,它都能正常工作。如果我將此代碼交付給某個人在印度進行開發,它應該自動處理其本地服務器的偏移並相應地進行調整。
我需要轉換爲UTC之前做這樣的事情,我應用偏移東部時間:
sb.AppendFormat("DTSTART:{0}\n", thisEvent.StartDate.ApplyEasternOffset().ToUniversalTime().ToString("yyyyMMddTHHmmssZ"));
很抱歉,如果這是一個已經討論過的話題,我只是不知道的最好的條件來找到這樣的問題。提前致謝。
此問題開始於服務器產生本地時間戳而不是UTC。這將是很長一段時間你的屁股疼痛,不得不猜測服務器的位置,直到你解決這個問題。 – 2011-04-04 16:14:38