.NET преобразование даты и времени в UTC с учетом часового пояса - PullRequest
12 голосов
/ 05 августа 2011

Используя C #, мне нужно конвертировать входящие значения даты и времени в UTC. Я знаю, что в .NET есть функциональность для этих преобразований, но все, что мне нужно для определения часового пояса, это стандартный список часовых поясов

http://www.timegenie.com/timezones

Какой лучший способ сделать это в .NET? Нужно ли создавать таблицу сопоставления для преобразования часовых поясов в идентификаторы в TimeZoneInfo.GetSystemTimeZones () (например, «Стандартное тихоокеанское время (Мексика)») так что я могу использовать TimeZoneInfo.FindSystemTimeZoneById ()?

Спасибо за любую помощь

Ответы [ 3 ]

17 голосов
/ 05 августа 2011

Я делал это раньше, сохраняя идентификатор часового пояса в базе данных, используя таблицу сопоставления. то есть таблица, содержащая результаты TimeZone.GetSystemTimeZones()

На самом деле вам не нужно использовать TimeZoneInfo.FindSystemTimeZoneById(), хотя: вы можете выполнить преобразование, используя одну из перегрузок TimeZoneInfo.ConvertTimeBySystemTimeZoneId(). Этот метод имеет некоторые перегрузки, которые принимают значения DateTime, и некоторые, которые принимают значения DateTimeOffset (которые являются предпочтительными, так как они указывают однозначный момент времени).

например.

TimeZoneInfo.ConvertTimeBySystemTimeZoneId(DateTime.Now, "New Zealand Standard Time", "UTC")

Реальным преимуществом использования идентификатора системного часового пояса, а не смещения, хранящегося в базе данных, является то, что летнее время автоматически обрабатывается для вас TimeZoneInfo.ConvertTimeBySystemTimeZoneId.

2 голосов
/ 05 августа 2011

На MSDN много информации о конвертации в разные часовые пояса.

Возможно, вы захотите использовать ConvertTimeBySystemTimeZoneId (см. Ссылку для примера).

1 голос
/ 05 августа 2011
...