3

2011 年 11 月 6 日の午前 2 時 (EST、ニューヨークなど) は、夏時間スケジュールによると午前 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 日に変更されたので意味がありません。

編集:うわー、これは私にあります。コードで 2011 の代わりに 2012 を使用しました。

4

1 に答える 1

2

あなたの説明を見てください:

2011年 11 月 6 日

コードを見てください:

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

私たちは問題を発見したと思います。

2012 年のサマータイム スケジュールを見ると、.NET が言うように、2012 年 11 月 4 日に変更が行われていることがわかります。

もちろん、コードはNoda Timeでより明確になると主張しますが、私は偏っています :)

于 2012-09-04T17:01:52.100 に答える