我一直在使用DateTime和TimeZoneInfo类,我用以下代码遇到了一个有趣的结果:
var dstStart = new DateTime(2013, 3, 10, 2, 0, 0, DateTimeKind.Local);
var result = TimeZoneInfo.Local.IsDaylightSavingTime(dstStart);
Run Code Online (Sandbox Code Playgroud)
结果是False.我实际上会想到它True(DST从3月10日凌晨2点开始)
然后我尝试使用相似的代码FindSystemTimeZoneById:
var myTimeZone = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var result = myTimeZone.IsDaylightSavingTime(dstStart);
Run Code Online (Sandbox Code Playgroud)
结果令人惊讶True.
然后我检查了这些对象是否都代表相同的时区:
myTimeZone.Id == TimeZoneInfo.Local.Id // returns True (Both are "Eastern Standard Time")
Run Code Online (Sandbox Code Playgroud)
我的问题是:为什么这些结果不同,更重要的是我如何才能使它们相同?
我的电脑肯定在Eastern Standard Time时区
更多信息:
我重新计算了我的计算机时钟,并运行了一些测试来比较上述TimeZoneInfo每种方法返回的对象.这是我的测试程序
var timeZoneFromLookup = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var dstStart = new DateTime(2013, 3, 10, 2, 0, 0, …Run Code Online (Sandbox Code Playgroud)