c # Преобразование времени UTC в центральное, включая часовой пояс в объекте DateTime - PullRequest
0 голосов
/ 12 мая 2019

Я конвертирую время по Гринвичу, взятое из локального времени Сервера в центральное стандартное время. У меня это работает на сервере в Германии.

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

Выпускается как 2019-05-11T14: 44: 09 + 02: 00 когда мне нужно, чтобы это было 2019-05-11T14: 44: 09-06: 00

TimeZoneInfo CRtimezone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, CRtimezone);

+ 02: 00 - это смещение UTC для Германии, которое мне не нужно, даже если время и дата указаны в центральном времени.

Есть ли способ передать или включить смещение в объект DateTime?

1 Ответ

3 голосов
/ 12 мая 2019

Есть ли способ передать или включить смещение в объект DateTime?

Нет, DateTime структура имеет нет имеет Смещение UTC , но DateTimeOffset имеет. Если вы действительно хотите сохранить в своем коде значение смещения UTC, я предлагаю вам работать с DateTimeOffset вместо DateTime.

Так как он не сохраняет значение смещения UTC, когда вы получаете его текстовое (также известное как строка) представление, вы все еще получаете значение смещения вашего сервера в Германии (включает * Спецификаторы 1023 *, z, zz и zzz (кстати). TimeZoneInfo.ConvertTimeFromUtc метод возвращает экземпляр DateTime, значение смещения, которое вы, возможно, захотите представить, зависит от как вы хотите его показать.

Возможно, вы захотите объединить Спецификатор формата Sortable ("s") представление вашего DateTime и значения TimeZoneInfo.BaseUtcOffset.

TimeZoneInfo CRtimezone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
$"{TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow, CRtimezone).ToString("s")}{CRtimezone.BaseUtcOffset}".Dump();
...