残念ながら、「現在の」タイム ゾーンの概念は、コードが実行されているマシンのオペレーティング システムの設定に関連付けられています。タイム ゾーンを変更するための Win32 API がいくつかありますが、それらの使用はお勧めしません。それらは「スレッドセーフ」ではないだけでなく、「プロセスセーフ」でもありません。タイム ゾーンの設定は、マシン上で実行されているすべてのものに影響します。
そうは言っても、あなたのユースケースが実際に何であるかに興味があります。スレッドごとにタイムゾーンを設定する立場にある場合は、ローカル設定にまったく依存しない立場にある可能性があります。おそらく、代わりに on の変換メソッドを利用できますTimeZoneInfo
。
たとえば、別のタイム ゾーンで現在の時刻を探しているとします。あなたはこれを行う能力を探しているかもしれません:
using (TimeZone.CurrentTimeZone = ... )
{
var now = DateTime.Now;
}
ただし、代わりに、必要に応じて UTC から単純に変換する必要があります。
var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
DateTime.UtcNow, "some other timezone id");