От MSDN :
FindSystemTimeZoneById
пытается сопоставить идентификатор с именами подразделов ветви HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Time Zones
реестра в Windows XP и Windows Vista. Эта ветвь не обязательно содержит полный список идентификаторов часовых поясов.
Исходя из таблицы, на которую вы ссылаетесь, вы хотите передать строку Europe_Central
, поскольку это Windows-версия Olson "Europe / Copenhagen". (Обратите внимание, что в соответствии с документами MSDN он не чувствителен к регистру.) Если это не сработает, следует проверить реестр, чтобы убедиться, что запись Europe_Central
существует.
Подробнее о базе данных Olson tz и о том, как она определяет часовые пояса, см. wikipedia .
Обновление 1:
В моем реестре (Vista) он указан как Central Europe Standard Time
, это строка, которую мне нужно передать в качестве параметра, у вас есть похожая запись?
Если эта запись отсутствует в вашем реестре, вы можете создать ее самостоятельно , используя информацию из здесь , хотя похоже, что вам придется создавать правила для летнего времени (см. ссылку).
Вы также можете попробовать использовать DateTimeOffset
с DateTime
, хранящим время на локальном сервере и передающим TimeSpan
+1 час (CET).
В зависимости от того, что вы пытаетесь сделать, вы также можете просто вычесть один час из времени CET, чтобы получить UTC. (Хотя это не сработает, как только Центральное европейское летнее время вступит в силу; тогда вам нужно вычесть два часа.)