8

2013 年、英国では 3 月 31 日までサマータイムが開始されません。

それでも、TimeZoneInfo.ConvertTimeToUtc特定の時間を UTC 時間に変換しようとすると、1 時間が差し引かれます。

どうしてこれなの?夏時間がアクティブでないことをこのメソッドに伝える必要がありますか?

var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);
var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time"));
Console.WriteLine(convertedTime); // subtracts one hour, even though England time and GMT should be equal
4

3 に答える 3

8

単に間違ったタイムゾーンを使用しています。イギリスは「GMT標準時」ゾーンにあります。

「西ヨーロッパ標準時間」ゾーンは、ヨーロッパ大陸、アムステルダム、ベルリン、ベルン、ローマ、ストックホルム、ウィーン、UTC + 01:00用です。

于 2013-03-17T01:33:18.903 に答える
2

[注: この回答は、コードを実行しているコンピューターが GMT タイムゾーンにあることを前提としています]

これは、.Net によると、「W. ヨーロッパ標準時」が UTC と同じタイムゾーンではないためです (そうである必要があります)。これは非常に奇妙で、.Net ライブラリのバグのようです。

このため、誤って時間を UTC に変換するように指示し、UTC (つまり GMT 時間) を渡しましたが、その後、UTC より 1 時間進んでいる「西ヨーロッパ標準時」であると伝えました。 .

当然のことながら、1時間で結果として生じる時間は異なります。

ステップバイステップ:

var now = new DateTime(DateTime.Now.Ticks, DateTimeKind.Unspecified);

これはnow、UTC の時刻に設定されます。

var convertedTime = TimeZoneInfo.ConvertTimeToUtc(now, TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time")

これは、「西ヨーロッパ標準時」、つまり UTC+1 でnowあると仮定して、UTC に変換されます。nowしかし、そうではありません!したがって、結果は正しくありません。

[以下のコメントに応じて編集]

"W. Europe Standard time" UTC である必要がありますが、何らかの理由でそうではないことに注意してください。そして、これを行うと:

TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard time")

(明らかに) 正しい UTC ではなく、UTC+1 を返します。名前も に変更し"W. Europe Daylight Time"ます。奇妙なバグのように見えますか?

【2回目の編集】

Microsoft タイム ゾーン インデックス値を確認してください(およびこちらも参照)。(注:これらのリンクはどちらも実際には Windows 7 用ではありませんが、同じ定義が含まれています。)

「西ヨーロッパ標準時」のエントリがあり、明確に述べています(GMT+01:00) Amsterdam, Berlin, Bern, Rome, Stockholm, Vienna

于 2013-03-17T00:30:38.510 に答える
-1

私たちが持っている2つは西ヨーロッパ時間で、西ヨーロッパの夏時間/夏時間ですよね? 西ヨーロッパ標準時を入力すると、標準がタイムゾーンとしてリストされているかどうかに関係なく、最も近い夏時間または夏時間に自動的に一致する可能性があります。

ちなみに、イギリスの夏時間は西ヨーロッパの夏時間と同じです。その間、グリニッジは西ヨーロッパ時間と一致します-同じタイムゾーンですが、BSTは歴史的に早く開始され、2002年にEU規則と一致する前です.事実上、同じシステムの別の名前.

于 2013-06-10T16:49:32.823 に答える