2011年11月6日凌晨2点(美国东部时间,例如纽约),根据daylight saving time schedule,凌晨3点。
有人知道为什么.NET框架中的TimeZoneInfo.ConvertTime
函数会返回以下内容:
var tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
var f = "yyyy/MM/dd HH:mm:ss";
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/03 07:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 4, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/04 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 6, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/06 06:00:00"
TimeZoneInfo.ConvertTime(new DateTimeOffset(2012, 11, 7, 11, 0, 0, TimeSpan.Zero), tzi).ToString(f);
"2012/11/07 06:00:00"
似乎时间变化发生在11月4日,这没有任何意义,因为它发生在6日。
编辑:哇,这个是我的。我在代码中使用了2012而不是2011。
答案 0 :(得分:2)
看看你的描述:
11月6日, 2011
现在看看你的代码:
new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero)
我认为我们已经找到了问题。
查看daylight saving time schedule for 2012显示2012年11月4日发生的变化,就像.NET所说的那样。
当然,我仍然认为Noda Time中的代码更清晰,但我有偏见:)