2010-10-25 2 views
2

У меня возникла проблема, когда мой сервер ожидает объектов datetime в формате GMT, и мое приложение UI всегда создает и обрабатывает все объекты datetime в соответствии с локальной культурой. Я не могу изменить культуру, поскольку существуют другие функции, которым нужны объекты datetime. в соответствии с местным форматом. Я написал для этого конвертер, не уверенный, есть ли у меня полка api, которая позволяет мне это делать. Также немного запутался в методе GetUtcOffset на timezoneinfo, даёт ли разница между местным временем и временем gmt? документация, доступная на msdn, была немного критической для меня. Пожалуйста, можете ли вы помочь? Также как я могу ее протестировать, изменив культуру и проверив вывод?TimeZoneInfo | GetUtcOffset: лучшее решение?

Этот класс преобразует объекты времени даты в эквивалент времени GMT, а также преобразует его обратно при приеме с сервера.

Примечание. Как мой сервер, так и пользовательский интерфейс работают в режиме CET, однако эти объекты datetime являются специфическими для Великобритании и, следовательно, серверу требуется их в GMT.

public class GmtConverter : IDateConverter 
    { 
     private readonly TimeZoneInfo timeZoneInfo; 

     public GmtConverter() 
      : this(TimeZoneInfo.FindSystemTimeZoneById("GMT Standard Time")) 
     { 

     } 
     public GmtConverter(TimeZoneInfo timeZoneInfo) 
     { 
      this.timeZoneInfo = timeZoneInfo; 
     } 

     public DateTime Convert(DateTime localDate) 
     { 
      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate + utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified); 
     } 

     public DateTime ConvertBack(object local) 
     { 
      var localDate = (DateTime) local; 

      var utcOffset = timeZoneInfo.GetUtcOffset(localDate); 

      var unSpecified = localDate - utcOffset; 

      return DateTime.SpecifyKind(unSpecified, DateTimeKind.Unspecified);    
     } 
    } 
+0

Связанные вопрос: http://stackoverflow.com/questions/2532729/daylight-saving-time и-часовой пояс, передовая практика, – Oded

ответ

0

Когда вы говорите GMT, вы имеете в виду UTC? От Wikipedia:

В случайном использовании, когда фракции в секунды не важны, Гринвич Среднее время (GMT) можно считать эквивалентно UTC или UT1. Высказывание «GMT» часто подразумевает либо UTC, либо UT1, когда используется в неформальных или случайных контекстах. В технических контекстах избегается использование «GMT»; недвусмысленная терминология «UTC» или «UT1» - .

Если да, то проблема решена:

Смежные вопросы