3

2011 年 11 月 6 日凌晨 2 点(美国东部标准时间,例如在纽约),根据夏令时时间表,现在是凌晨 3 点。

有人知道为什么TimeZoneInfo.ConvertTime.NET 框架中的函数返回以下内容:

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。

4

1 回答 1

2

看你的描述:

2011 年 11 月 6

现在看看你的代码:

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

我想我们找到了问题所在。

正如 .NET 所说,查看 2012 年的夏令时时间表显示了 2012年 11 月 4 日发生的变化。

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

于 2012-09-04T17:01:52.100 回答