2012-09-04 46 views
3

2011年11月6日凌晨2点(美国东部时间,例如纽约),根据daylight saving time schedule,凌晨3点。使用TimeZoneInfo.ConvertTime时错误的夏令时日期?

是否有人知道为什么从.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" 

看来,如果上月4日,这使得它发生在没有意义的发生的时间变化6。

编辑:哇,这一个对我来说。我在代码中使用了2012而不是2011。

+0

您的代码将是一个*很多*容易,如果我们没有滚动阅读(以及有一个名为“区域”的变量,而不是在每次调用中调用FindSystemTimeZoneById也会有所帮助......) –

+0

对不起,让我解决这个问题。 –

回答

2

看你的描述:

11月6日,

现在看看你的代码:

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

我想我们已经找到了问题。

查看daylight saving time schedule for 2012显示了2012年11月4日发生的更改,就像.NET所说的那样。

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

+0

哇。我认为这个错误在我脑海中。我需要找一些拜贡。或者Noda。 –

+0

我应该删除这个话题吗? –

+0

@ErwinMayer:由你决定。我不会介意任何方式。 –