2011-03-21 70 views
2

我在LINQPad中運行此代碼片段。C#TimeZoneInfo.ConvertTimeToUtc與其他時間轉換工具不匹配

DateTime dt = new DateTime(2011, 2, 1,15,0,0); 
dt.Dump(); 
TimeZoneInfo timeZoneId = TimeZoneInfo.FindSystemTimeZoneById("Samoa Standard Time"); 
//timeZoneId.GetAdjustmentRules().Dump(); 
var x = TimeZoneInfo.ConvertTimeToUtc(DateTime.SpecifyKind(dt, DateTimeKind.Unspecified), timeZoneId); 
x.Dump(); 

結果是: 2011年2月1日下午3點00分零零秒 2011年2月2日1:00:00 AM。

當我去GMT Time Convertor仔細檢查時,返回的值是:2/1/2011 2:00:00 AM。 .Net函數爲什麼會返回與另一個站點不同的值。誰是對的?我們剛剛切換到夏令時(我沒有在切換之前檢查它),這是否重要?

我們的質量檢查中發現不匹配的列表:

ID GMT Offset Name    DateTime Tested  Conversion Result Correct GMT 
             (Value in DB) 
16 -11:00  Samoa    2/1/2011 3:00 PM 2/2/2011 1:00 AM 2/2/2011 2:00 AM 
19 +12:00  Auckland, Wellington 2/1/2011 3:00 PM 2/1/2011 2:00 AM 2/1/2011 3:00 AM 
20 +12:00  Fiji    2/1/2011 3:00 PM 2/1/2011 2:00 AM 2/1/2011 3:00 AM 
23 +10:00  Canberra,   2/1/2011 3:00 PM 2/1/2011 4:00 AM 2/1/2011 5:00 AM 
       Melbourne, Sydney 
25 +10:00  Hobart    2/1/2011 3:00 PM 2/1/2011 4:00 AM 2/1/2011 5:00 AM 
27 +09:30  Adelaide   2/1/2011 3:00 PM 2/1/2011 4:30 AM 2/1/2011 5:30 AM 
68 +01:00  Windhoek   2/1/2011 3:00 PM 2/1/2011 1:00 PM 2/1/2011 2:00 PM 
80 -03:00  Brasilia   2/1/2011 3:00 PM 2/1/2011 5:00 PM 2/1/2011 6:00 PM 
84 -03:00  Montevideo   2/1/2011 3:00 PM 2/1/2011 5:00 PM 2/1/2011 6:00 PM 
88 -04:00  Cuiaba    2/1/2011 3:00 PM 2/1/2011 6:00 PM 2/1/2011 7:00 PM 
89 -04:00  Santiago   2/1/2011 3:00 PM 2/1/2011 6:00 PM 2/1/2011 7:00 PM 
+0

由於這個問題,我讀了關於Noda Time的MSDN(http://msdn.microsoft.com/en-us/magazine/jj991981.aspx)。如果做時間轉換 – Aligned 2014-02-28 19:16:02

回答

1

事實證明,這只是DaylightSavingsTime(或他們對這些國家的版本差異如果在例子中,DT改爲 日期時間DT。 = new DateTime(2011,4,3,15,0,0);返回的時間是上午2:00,GetAdjusmentRules()方法顯示從9/1/11到4/1/11的過渡時間,所以在4/1之後,他們的DaylightSavingsTime版本開始了。