Преобразовать время в указанный часовой пояс, используя C #? - PullRequest
2 голосов
/ 12 марта 2010

Я работаю над приложением в C # с .Net 3.5. У меня значение часового пояса пользователя хранится в БД с таким форматом (- 05: 00,1) , где -5.00 представляет значение часового пояса EST, а 1 указывает, что этот часовой пояс следует за переходом на летнее время (если 0 не является зоной перехода на летнее время).

Теперь я хочу преобразовать любое значение даты и времени в значение этого часового пояса, учитывая значение летнего времени.

Любая помощь приветствуется. Спасибо

Ответы [ 4 ]

5 голосов
/ 12 марта 2010

Наличие только смещения и того, находится ли оно в летнее время, на самом деле недостаточно для указания часового пояса: может быть несколько часовых поясов с одинаковым стандартным смещением и смещением DST, но которые имеют переходы DST в разное время. .

Эти данные уже есть в базе данных или вы все еще разрабатываете их? В идеале вы должны хранить идентификатор часового пояса - те, с которыми TimeZoneInfo работает, являются идентификаторами Windows, что не является идеальным IMO (я предпочитаю идентификаторы IANA / Olson, с которыми обычно работает остальная часть отрасли ) но, по крайней мере, он представляет собой часовой пояс реального времени.

Как только вы получите TimeZoneInfo и мгновение, которое хотите конвертировать, ConvertTimeFromUtc и ConvertTimeToUtc, вероятно, то, что вы ищете - но будьте внимательно относитесь к тому, что вы подразумеваете под «любым значением даты и времени»; вам нужно убедиться, что вы всегда точно знаете, что представляете.

BCL несколько неопрятен во всем этом, и это одна из причин, по которой я начал Noda Time , которая позволяет использовать данные часового пояса IANA, а также BCL.

3 голосов
/ 12 марта 2010

@ Скит прав насчет часовых поясов. Поверь мне, они сумасшедшие. У вас есть такие места, как Индия, которые находятся в 5 часах езды. Такие места, как Венесуэла, просто меняют свой часовой пояс. Такие места, как США, которые меняют дату начала и окончания летнего времени. Вы должны помнить, что часовые пояса зависят от политической воли страны, и они меняются (чаще, чем вы думаете). Используйте идентификатор часового пояса вместо того, чтобы пытаться отслеживать смещение в вашей БД.

И если вы еще не поняли, использование DateTimeOffset сделает вашу жизнь в 100 раз проще, если вам придется иметь дело с часовыми поясами.

0 голосов
/ 12 марта 2010

Используйте для этого DateTime.ParseExact () . Но это не поддерживает индикатор DST.

0 голосов
/ 12 марта 2010

Почему вы не получите GMT0 и не добавите задержку пользователя (+/-)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...