我在LINQPad中运行此代码片段。
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();
结果是: 2/1/2011 3:00:00 PM 2/2/2011 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 :(得分:1)
事实证明,这只是DaylightSavingsTime(或这些国家/地区的版本)的差异。如果示例中的dt更改为 DateTime dt = new DateTime(2011,4,3,15,0,0);,返回时间是凌晨2:00,GetAdjusmentRules()方法显示从9/1/11到4/1/11的转换时间,所以在4/1之后他们的DaylightSavingsTime版本开始了。