Переход на .NET 3.5 абсолютно невозможен? Это сделало бы вашу жизнь намного проще. В противном случае вы застряли с обычными классами TimeZone и DaylightSavings, а также с необходимостью извлечения известных часовых поясов с помощью P / Invoke.
У Уильяма Стейси есть блог с некоторым кодом для этого - но я не пробовал, поэтому не могу ручаться за его точность. (По моему опыту, он обычно довольно хорош :) Нет сомнений в том, что подобные фрагменты кода существуют, если он вам не помогает.
Я считаю, что используемый им API не имеет доступа к историческим данным, кстати. Другими словами, он будет предполагать, что DST всегда активируется в первое воскресенье октября (или каким бы то ни было правилом) вместо того, чтобы знать, что правило изменилось со временем. TimeZoneInfo в .NET 3.5 поддерживает исторические данные там, где это делает ОС.