2014-02-18 42 views
7

我注意到關於.ToUniversalTime()的這個奇怪的問題,但我找不出原因。.ToUniversalTime(),爲什麼它以這種方式工作?

如果我做

DateTime currentServerTime = System.DateTime.Now; 
DateTime currentUTCServerTime = currentServerTime.ToUniversalTime(); 

log.Debug("Current server time :" + currentServerTime); 
log.Debug("Current Server UTC Time is :" + currentUTCServerTime); 

結果除了

Current server time :2/18/2014 2:09:23 PM 
    Current Server UTC Time is :2/18/2014 7:09:23 PM 

5小時。

鑑於服務器位於美國東海岸,偏移量爲-5。這是正確的。

現在,如果我做

String dateTimeString = "7/10/2013"; 
DateTime baseLined = Convert.ToDateTime(dateTimeString); 
DateTime convertedUTCTime = baseLined.ToUniversalTime(); 

log.Debug(dateTimeString + " is :"+baseLined); 
log.Debug(dateTimeString + " UTC time is :" + convertedUTCTime); 

結果

7/10/2013 is : 7/10/2013 12:00:00 AM 
7/10/2013 UTC time is: 7/10/2013 4:00:00 AM 
除了

4小時。

爲什麼一個結果顯示5小時的差異,另一個顯示4?

請幫忙。

===編輯====

感謝Jon和Usr。現在我明白了.ToUniversalTime()將考慮服務器的DST,並根據它附加的DateTime對象調整UTC。

所以我仍然試圖在這種情況下圍繞它。

在我的數據庫中,2013年7月10日是截止日期,並記錄爲「7/10/2013 4:00:00 AM」(因爲在此期間,它是在夏令時,偏移-4) 。

現在是2014年2月,DST不生效,偏移量現在爲-5。但是因爲這個原因,當我將用戶的時區偏移-5調整爲「7/10/2013 4:00:00 AM」時,它將變爲7/09/2013而不是2013年7月10日。

我該如何處理這種情況?

+1

「鑑於服務器位於美國東海岸,偏移量爲-5,這是正確的。」 - 你認爲抵消是在7月10日? –

+0

@Jon,哇,好的。這解釋了很多。那麼這意味着ToUniversalTime()也會考慮服務器的夏令時偏移量嗎?我不知道! – Liming

+0

是的,它會將當地時間轉換爲世界時。說實話,如果它沒有遵守DST,那就沒用了。 –

回答

5

由於daylight savings。當地時間與您的時鐘一樣。 UTC連續無間隙,沒有模糊的時間點。

+1

謝謝你。由於奇怪的原因,我對ToUniversalTime()有一個錯誤的理解,看起來好像需要夏令時考慮服務器的位置。 在這種情況下,如何判斷時間是否已通過夏令時進行調整? – Liming

+0

@Liming這是一個我不能回答的新問題。 – usr

相關問題