[注: この回答は、コードを実行しているコンピューターが 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