К сожалению, любое понятие «текущего» часового пояса привязанную к операционной системе настройки машины, код работает. Есть несколько Win32 apis для изменения часового пояса, но я не рекомендую их использовать. Они не только не «потокобезопасны», но и не являются «безопасными для процесса». Настройка часового пояса влияет на все, что работает на машине.
Сказали, что мне будет любопытно, каков ваш прецедент на самом деле. Если вы находитесь в положении, чтобы установить часовой пояс для потока, то вы, вероятно, можете вообще не полагаться на локальную настройку. Вероятно, вы можете использовать методы преобразования на TimeZoneInfo
.
Например, скажем, что вы искали текущее время в другом часовом поясе. Вы могли бы искать возможность сделать это:
using (TimeZone.CurrentTimeZone = ... )
{
var now = DateTime.Now;
}
Но вместо этого вы должны просто преобразовать из UTC в соответствующих случаях:
var now = TimeZoneInfo.ConvertTimeBySystemTimeZoneId(
DateTime.UtcNow, "some other timezone id");
Мы не желательные возможности для .NET сайта, мы твердый ответ на сайт твердых вопросов. Обработка часового пояса в большинстве случаев нетривиальна, добавление слоя сложности часового пояса в потоке просто вызывает проблемы – Petesh
@Petesh Я не хотел спрашивать, почему на самом деле. Мне было интересно, если это возможно. –
Нет ничего, что помешало бы вам создать локально-локальный объект для часовых поясов, просто ничего, кроме вашего кода, не будет использовать его. Вы должны посмотреть на ['ThreadLocal' Class] (http://msdn.microsoft.com/en-us/library/dd642243.aspx) в .NET для тривиального способа его реализации. –
Petesh