14

現在のスレッドの現在の文化を変更できることはわかっています。そして、1 つの文化には米国のように多くのタイムゾーンが存在する可能性がTimeZoneInfoあるため、CurrentCulture

ただし、同じ手法を使用して、現在のスレッドの TimeZoneを処理します。

このようなものを作ることができれば、とてもいいでしょう:

TimeZone.CurrentTimeZone = TimeZoneInfo.FindSystemTimeZoneById("timezone id");
4

1 に答える 1

10

残念ながら、「現在の」タイム ゾーンの概念は、コードが実行されているマシンのオペレーティング システムの設定に関連付けられています。タイム ゾーンを変更するための Win32 API がいくつかありますが、それらの使用はお勧めしません。それらは「スレッドセーフ」ではないだけでなく、「プロセスセーフ」でもありません。タイム ゾーンの設定は、マシン上で実行されているすべてのものに影響します。

そうは言っても、あなたのユースケースが実際に何であるかに興味があります。スレッドごとにタイムゾーンを設定する立場にある場合は、ローカル設定にまったく依存しない立場にある可能性があります。おそらく、代わりに on の変換メソッドを利用できますTimeZoneInfo

たとえば、別のタイム ゾーンで現在の時刻を探しているとします。あなたはこれを行う能力を探しているかもしれません:

using (TimeZone.CurrentTimeZone = ...  )
{
    var now = DateTime.Now;
}

ただし、代わりに、必要に応じて UTC から単純に変換する必要があります。

var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
                       DateTime.UtcNow, "some other timezone id");
于 2013-03-28T14:22:11.330 に答える