Как преобразовать время UTC во время в любом другом часовом поясе на С#

Я работаю в C#.net - .Net fx - это 2.0, который не поддерживает преобразование между разными часовыми поясами. Я написал планировщик на основе UTC, но он выдает ошибки в 1 час в периоды DTS для Лондона. Мне нужно какое-то решение, чтобы я мог получить правильное время в любом часовом поясе относительно UTC с правильными настройками летнего времени.


person MSIL    schedule 11.10.2008    source источник


Ответы (1)


Переход на .NET 3.5 абсолютно невозможен? Это сделало бы вашу жизнь намного, намного проще. В противном случае вы застряли с простыми классами TimeZone и DaylightSavings, а также должны получать известные часовые пояса с помощью P/Invoke.

У Уильяма Стейси есть сообщение в блоге с кодом для этого - но я не пробовал, поэтому не могу ручаться за его точность. (По моему опыту, он обычно довольно хорош :) Без сомнения, есть похожие фрагменты кода, если он вам не поможет.

Я считаю, что API, который он использует, не имеет доступа к историческим данным, кстати. Другими словами, будет предполагаться, что переход на летнее время всегда начинается в первое воскресенье октября (или какое-то другое правило), а не известно, что правило изменилось с течением времени. TimeZoneInfo в .NET 3.5 поддерживает исторические данные там, где это делает ОС.

person Jon Skeet    schedule 11.10.2008
comment
Соглашаться. Я видел старый код, делающий вещи P/Invoke, и TimeZoneInfo в 3.5 делает все это устаревшим. - person Robert Paulson; 11.10.2008
comment
Привет, Джон, сообщение в блоге больше недоступно, глупый вопрос, ты знаешь, где я могу посмотреть или указать мне куда-нибудь, что может помочь мне найти эту информацию? - person 1800 INFORMATION; 23.05.2014