我很努力地將DateTime轉換爲UTC,這個概念和所有東西,我沒有正確理解。如何正確地將日期轉換爲UTC,然後將其轉換回來?
當我得到一個日期時間字符串,說:「2013年7月10日」,我簡單地做
Convert.ToDateTime("7/10/2013").ToUniversalTime();
這會將其記錄爲「2013年7月10日上午04時○○分00秒 「在數據庫中。服務器位於美國東海岸(-5)。當然,7月2013時,仍在觀察DST,在這段時間,所以偏移爲-4,這種額外的4小時上午4點零零分00秒「記錄爲UTC。
正如我在寫這如果我將-5偏移量應用於「7/」,那麼這是2014年2月,DST沒有生效,所以現在抵消了-5。在我的應用程序中,這是我在我的應用程序中選擇的偏移量。/2013 4:00:00 AM「,日期將是」7//2013 11:00:00 PM「。
哪一個錯誤,並關閉一天。
問題#1
那麼如何做我正確地轉換UTC時間回來?意思是,當用戶現在在2014年2月加載我的應用程序(當前時區偏移-5)時,2013年7月10日上午4:00:00應該仍然是7/10/2013,而不是7/09/2013。
令我困惑的是,因爲.ToUniversalTime()將服務器DST考慮在內,是否存在硬件集「通用時間」,它不受服務器位置的影響?
問題2
會發生什麼事,當我有兩個西部和東部沿海服務器寫入數據庫?如果應用程序記錄的UTC時間是基於東或西海岸的話,應用程序如何能夠說明問題?
基本上,代碼如何告訴,「7/10/2013 4:00:00 AM」是在東海岸創建的UTC時間(表示2013年7月10日00:00:00 AM)東海岸),而不是在西海岸的一臺服務器(這表明它是美國西海岸的7/9/2013 20:00:00 pm)?
對不起,如果這聽起來很愚蠢。
==========最後的編輯,我目前的解決方案===============
的MiMo的回答是有道理的。我用兩件事情混爲一談。
- UTC時間存儲在數據庫中意味着什麼到服務器?
- 服務器的時間與應用程序用戶的關係是什麼?
我的應用程序可以被不同時區的用戶使用,有些用戶與服務器在同一時區,有些用戶不在。有些旅行,即使他們與服務器處於同一時區,他們可能會一直在不同的時區登陸。我的應用程序允許他們選擇他們在哪個時區,並適當反映時間。
最初,我只是從數據庫中獲取UTC時間,並從中減去用戶的時區偏移量。正如Mimo所說,這是錯誤的。原因可以在我上面的帖子中看到。
我原來的解決方案是現在得到服務器的時區偏移量,並使用它從UTC加/減,這也是錯誤的。截至2013年10月7日,服務器當時的偏移量爲-4。現在,在2014年2月,服務器時區偏移量爲-5。解決這個當然是使用.ToLocalTime()
之前,我深入挖掘米姆的關於如何使用TimeZone.ToLocalTime(建議),這裏是我做過什麼,暫時解決問題。
從數據庫中獲取UTC日期並將其轉換爲.ToLocalTime,即服務器顯示的日期。所以到服務器,7/10/2013 4:00:00 AM變成7/10/2013 12:00:00 AM。
獲取服務器時區偏移量。它目前顯示-5,因爲它在美國東海岸。
獲取用戶的時區偏移量。對於西海岸,用戶現在選擇-8。對於東海岸,用戶現在選擇-5。
獲取用戶的時區和服務器的時區之間的差異。西海岸是-3。東海岸爲0.
減去7/10/2013 12:00:00 AM之間的差異,因此西海岸的截止日期爲2013年9月7日21:00:00,東海岸的截止日期爲7/10/2013 12:00:00 AM。
全部正確。
非常感謝。現在可以深入研究TimeZone.ToLocalTime()並查看是否可以減少步驟2-5。
按照離開時間(物體)單獨計算並僅以UTC顯示時間。 – Bit
保存日期/時間的列的SQL數據類型是什麼? – wdosanjos