Ответ 1
К сожалению, любая концепция "текущего" часового пояса привязана к настройкам операционной системы, на которых работает код. Есть несколько Win32 apis для изменения часового пояса, но я не рекомендую их использовать. Они не только не "потокобезопасны", но и не являются "безопасными для процесса". Настройка часового пояса влияет на все, что выполняется на машине.
Тем не менее, мне было бы любопытно, каков ваш вариант использования. Если вы находитесь в положении, чтобы установить часовой пояс для потока, то вы, вероятно, можете вообще не полагаться на локальную настройку. Вероятно, вы можете использовать методы преобразования на TimeZoneInfo
.
Например, скажите, что вы искали текущее время в каком-то другом часовом поясе. Возможно, вы ищете возможность сделать это:
using (TimeZone.CurrentTimeZone = ... )
{
var now = DateTime.Now;
}
Но вместо этого вы должны просто конвертировать из UTC, если это необходимо:
var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
DateTime.UtcNow, "some other timezone id");