使用TimeZoneInfo.ConvertTime时夏令时错误



2011年11月6日凌晨2点(美国东部时间,例如纽约),根据夏令时时间表,时间为凌晨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年。

查看您的描述:

2011年11月6日

现在看看你的代码:

new DateTimeOffset(2012, 11, 3, 11, 0, 0, TimeSpan.Zero)

我想我们已经发现了问题。

看看2012年的夏令时时间表,就会发现变化发生在2012年11月4日,正如.NET所说。

当然,我仍然认为Noda Time中的代码会更清晰,但我有偏见:)

相关内容

  • 没有找到相关文章

最新更新