2015-08-31 4 views
1

Внутренний сервер - это C# и SQL Server.Определение смещения часового пояса времени UTC в .Net

Я сохраняю данные о времени регистрации в разных часовых поясах в UTC в моей БД. Мне нужно заполнить глобально распределенный интерфейс, чтобы он локализовал зарегистрированное время UTC, основанное на том, где находится передний конец, который будет известен, например. PT, ET. Он также должен обрабатывать летнее время, в котором я сталкиваюсь с трудностями.

Поскольку смещение UTC изменяется в зависимости от времени года из-за летнего времени, есть ли способ узнать, что такое UTC-смещение в C#, учитывая, что я знаю дату/время и часовой пояс ,

+2

Я подозреваю, что вам не нужно «выяснять» смещение и просто позволить базовой системе заботиться о преобразовании. Поэтому, если у вас есть значение DateTime и два объекта TimeZoneInfo (исходный часовой пояс, в этом случае UTC и целевой часовой пояс, известный для отображения пользователю), вы должны использовать что-то вроде этого: https://msdn.microsoft.com/en-us/library/bb382770(v=vs.110).aspx – David

+0

Удивительно, это именно то, что я ищу. Спасибо за вашу помощь! – CorribView

ответ

2

есть способ для меня, чтобы выяснить, что UTC смещение в C#, учитывая, что я знаю дату/время и часовой пояс

Технически вы не должны необходимость найти эту информацию, базовые системные часы/календарь/что-вы должны позаботиться об этом. (. Я уверен, что кто-нибудь, кто has worked on date-time logic будет свидетельствовать о том, что это нетривиальным, мягко говоря)

В идеале, в любое время вы должны преобразовать часовой пояс, у вас есть три вещи:

  1. A DateTime объект, представляющий значение, подлежащее преобразованию.
  2. A TimeZoneInfo объект, представляющий известный текущий формат объекта DateTime (в этом случае UTC).
  3. A TimeZoneInfo объект, представляющий целевой часовой пояс.

Учитывая эти вещи, в любое время вы хотите, чтобы отобразить DateTime к локализованному пользователю, вы будете использовать something like TimeZoneInfo.ConvertTime выполнить преобразование. В идеале это должно быть сделано как можно ближе к пользовательскому интерфейсу, так что логика поддержки всегда выполняется в UTC.

+2

Временные интервалы - сложная проблема с Jon Skeet http://codeblog.jonskeet.uk/2014/09/30/the-mysteries-of-bcl-time-zone-data/ http://codeblog.jonskeet.uk/2009/ 11/02/OMG-пони-ака-человечество-эпического обанкротиться / – Aron