int tzO = TimeZone.CurrentTimeZone.IsDaylightSavingTime(DateTime.Now) ? -4 : -5;
(これは 1 行のコードです。一部のブラウザでは 2 行に折り返されています。) なぜこのコードはうまくいかないのでしょうか?
なぜそれは吸うのですか?これはかなり主観的なものですが、いくつかのことをお伝えできます。
このTimeZone
クラスは非推奨です。古いものとしてマークされていませんが、MSDN ページTimeZoneInfo
を含むすべてのガイダンスでは、代わりに使用するように指示されています。
現在のタイム ゾーンを取得し、それを使用してオフセット値を手動で決定します。ハードコーディングした 2 つのうちの 1 つではなく、現在のタイムゾーンのオフセットの後だったと思う人もいるでしょう。
を渡すDateTime.Now
と、現地時間に依存しています。それは恐ろしいことではありませんが、夏時間の「フォールバック」移行のために、あいまいな時間参照を持つ可能性があります. UtcNow
代わりに明示的に使用する方がよいでしょう。
整数の整数時間を返しています。多くのタイム ゾーンでは 30 分のオフセットが使用されますが、まれに 45 分のオフセットがいくつかあります。代わりにa を使用する必要がありますTimeSpan
。
したがって、「吸う」ことのないこのコードのバージョンは次のようになります。
TimeSpan offset = TimeZoneInfo.Local.GetUtcOffset(DateTime.UtcNow);
を使用DateTime.UtcNow()
して UTC 時刻を取得できます。