1
var Result1 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, TimeZoneInfo.Local)

var Result2 = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,  TimeZoneInfo.FindSystemTimeZoneById(TimeZoneInfo.Local.Id));

どちらも Utc 時間を現地時間に変換しますが、この 2 つの異なる方法で結果またはパフォーマンスに違いはありますか?

どっちがいい?

Microsoft が TimeZoneInfo.Local を (Result1 のように) サンプルで直接使用しない理由 ( こちら)

4

4 に答える 4

1

TimeZoneInfo唯一の違いは、オブジェクトを取得し、その ID を取得し、その ID を使用して同じオブジェクトを再度検索するという迂回を行うことです。

例のコードがFindSystemTimeZoneByIdメソッドを使用している理由は、既知の ID のオブジェクトを取得しているためであり、既に持っているオブジェクトTimeZoneInfoからその ID を取得していないためです。TimeZoneInfo

于 2013-05-29T08:44:18.333 に答える
0

それらをどのように使用するかが重要です。TimeZoneInfo.FindSystemTimeZoneById()は、ローカル以外の別のタイムゾーンが必要な場合に使用されます。常にローカル タイムゾーンを使用する場合は、TimeZoneInfo.Localを使用してください。

性能的には、大差ないと思います。ただし、.NET プロファイラーまたは他のプロファイラーを使用してプロファイリングを試み、2 つの違いがどの程度かを確認できます。

于 2013-05-29T08:42:33.073 に答える
0

私のコメントを回答に拡張する価値があると思います。

DBで「ローカル」タイムゾーンが構成されているアプリケーションがありますが、サーバー自体のローカルタイムゾーンとは関係ありません。(クラウドサーバーで実行されています)。したがって、TimeZoneInfo.Localを使用するのは私には適していません。

私がしたいのは、使用するタイムゾーンをDBから読み取り、UTCからそのタイムゾーンに時間を変換することです。したがって、私は使用しています:

TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,  TimeZoneInfo.FindSystemTimeZoneById(GetTimeZoneId()));

GetTimeZoneId ()が DB から読み取る場所。

于 2013-05-29T08:42:06.557 に答える