C# 使用TimeZoneInfo.ConvertTime时夏令时日期错误?

C# 使用TimeZoneInfo.ConvertTime时夏令时日期错误?,c#,.net,time,timezone,dst,C#,.net,Time,Timezone,Dst,2011年11月6日凌晨2点(美国东部时间,例如在纽约),根据美国广播公司的说法是凌晨3点 有人知道为什么.NET framework中的TimeZoneInfo.ConvertTime函数会返回以下内容: var tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"); var f = "yyyy/MM/dd HH:mm:ss"; TimeZoneInfo.ConvertTime(new DateTimeOffset

2011年11月6日凌晨2点(美国东部时间,例如在纽约),根据美国广播公司的说法是凌晨3点

有人知道为什么.NET framework中的
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)
我想我们已经发现了问题所在

正如.NET所说,看一下2012年11月4日发生的变化


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

如果我们不必滚动查看代码,您的代码将更容易阅读。。。(在每次调用中使用名为“zone”的变量而不是调用FindSystemTimeZoneById也会有所帮助……)哇。我想虫子是在我脑子里。我需要找一些海湾湾。“还是野田?”欧文迈尔:由你决定。我不介意任何一种方式。我提交了一个删除它的请求,因为我自己还不能做。我不介意它是否会保留(即使它可能会让一些寻找类似问题的人感到困惑),因此,如果主持人更愿意保留它,那很好。@JonSkeet我问了一个相关的问题,你能检查一下吗: