我注意到關於.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日。
我該如何處理這種情況?
「鑑於服務器位於美國東海岸,偏移量爲-5,這是正確的。」 - 你認爲抵消是在7月10日? –
@Jon,哇,好的。這解釋了很多。那麼這意味着ToUniversalTime()也會考慮服務器的夏令時偏移量嗎?我不知道! – Liming
是的,它會將當地時間轉換爲世界時。說實話,如果它沒有遵守DST,那就沒用了。 –