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

#c# #time #timezone

Вопрос:

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

Ответ №1:

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

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

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

Комментарии:

1. Соглашаться. Я видел старый код, выполняющий функции P/Invoke, и TimeZoneInfo в 3.5 делает все это устаревшим.

2. Привет, Джон, запись в блоге больше недоступна, глупый вопрос, ты не знаешь, где я могу посмотреть или указать мне место, которое могло бы помочь мне найти эту информацию?