爲.NET DateTime.ToLocalTime方法狀態的文檔:DateTime.ToLocalTime在Windows XP
在Windows XP系統中,ToLocalTime從 UTC本地時間轉換時 方法只識別當前 調整規則。因此, 之前的 當前調整規則進入 之前的期間轉換可能無法準確反映UTC和本地時間之間的差異 。
我在Windows 7上開發,但部署到混合環境。我如何提供與ToLocalTime的Windows 7行爲相匹配的一致且正確的實現?
EDIT
我跑了測試:
static void Main()
{
// 8 AM in July, UTC. That would have been DST, so 3 AM CDT.
var dstDate = new DateTime(2010, 7, 1, 8, 0, 0, DateTimeKind.Utc);
// 8 AM in December, UTC. Not DST, so 2 AM CST.
var nonDstDate = new DateTime(2010, 12, 1, 8, 0, 0, DateTimeKind.Utc);
Log("DST Date ToLocalTime: " + dstDate.ToLocalTime());
Log("DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(dstDate));
Log("Expected: 3 AM July 1 2010");
Log(string.Empty);
Log("Non-DST Date ToLocalTime: " + nonDstDate.ToLocalTime());
Log("Non-DST Date ConvertTimeFromUtc: " + ConvertTimeFromUtc(nonDstDate));
Log("Expected: 2 AM December 1 2010");
Log(string.Empty);
Log("Date ToLocalTime Kind: " + dstDate.ToLocalTime().Kind);
Log("Date ConvertTimeFromUtc Kind: " + ConvertTimeFromUtc(dstDate).Kind);
}
private static void Log(string message)
{
Console.WriteLine(message);
}
private static DateTime ConvertTimeFromUtc(DateTime utcDateTime)
{
return
DateTime.SpecifyKind(
TimeZoneInfo.ConvertTimeFromUtc(
utcDateTime,
TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id)),
DateTimeKind.Local);
}
結果爲下XP專業版32位,SP3(如VM)和Windows相同 7企業64位:
DST Date ToLocalTime: 7/1/2010 3:00:00 AM DST Date ConvertTimeFromUtc: 7/1/2010 3:00:00 AM Expected: 3 AM July 1 2010 Non-DST Date ToLocalTime: 12/1/2010 2:00:00 AM Non-DST Date ConvertTimeFromUtc: 12/1/2010 2:00:00 AM Expected: 2 AM December 1 2010 Date ToLocalTime Kind: Local Date ConvertTimeFromUtc Kind: Local
文檔是否錯誤?我可以簡單地調用ToLocalTime嗎?
EDIT 2
我們跑這一個實際的XP系統(而不是VM)上,得到了相同的結果有作爲。我的測試用例是否正確?任何人都可以提供結果不同的情況嗎?
啊!當他們談到調整規則時,我認爲他們的意思是「我現在應該使用DST調整」。我剛剛發現這個[link](http://www.techrepublic.com/article/what-net-developers-need-to-know-about-daylight-saving-time-changes/6160501),說你是正確的。謝謝! – TrueWill