2016-02-26 4 views
2

Я использую приложение .net, где приложение считывает часовой пояс и принимает значение из реестра часового пояса с сервера..Net Применение для чтения реестра часового пояса на основе прошедшего языка часового пояса

Какая проблема, с которой я столкнулся, - это приложение, предназначенное для чтения реестра для любого стандартного имени нестандартного часового пояса (например, «Токийское стандартное время» [запомнить Эта строка находится на японском языке]) и найти реестр в качестве реестра, Английский язык.

Смотрите ниже фрагменте кода:

@"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Time Zones")) 

foreach (TimeZoneInformation tzi in TimeZones) 
      { 

       if (tzi.StandardName.ToLower() == timeZoneStandardName.ToLower()) 
       { 
        //If Day light doesn't apply to given timezone then return standard offset 
        //sb.AppendLine(); 
        //sb.AppendLine("========Matching Registry Foung ======"); 
        //sb.AppendLine("Timezone bias value : " + tzi.tzInfo.bias); 
        if (tzi.tzInfo.daylightDate.wYear == 0 && tzi.tzInfo.daylightDate.wMonth == 0 && tzi.tzInfo.daylightDate.wDay == 0 && 
         tzi.tzInfo.daylightDate.wHour == 0 && tzi.tzInfo.daylightDate.wMinute == 0 && tzi.tzInfo.daylightDate.wSecond == 0) 
        { 
         //if offset positive then add bias 


         if (isOffSetPositive) 
         { 
          date = date.AddMinutes(tzi.tzInfo.bias); 
         } 
         else 
         { 
          date = date.AddMinutes(-tzi.tzInfo.bias); 
         } 
         //sb.AppendLine("Updated DateTime value : "+ date.ToString()); 
         //ExceptionManager.LogInforamtion(sb.ToString()); 

         return; 
        } 

Конфигурация системы: OS: сервер Windows 2008 R2 Standard язык

Base OS: английский [США]

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

Пожалуйста, не стесняйтесь задавать соответствующий вопрос. Возможно, я пропустил какую-то полезную информацию.

ответ

4

Несколько вещей:

  • Вы не должны изобретать свой собственный TimeZoneInformation класс, чтение из реестра. Просто используйте System.TimeZoneInfo, который уже делает именно это.

  • Вы должны соответствовать с помощью Id часового пояса, который совпадает с именем раздела реестра. Это точные английские строки и никогда не переводятся на другие языки. Не совпадают на StandardName.

  • Значения StandardName, DaylightName и DisplayName действительно локализованы на языке операционной системы. Они не участвуют в .NET-глобализации, и вы не можете получить их без установки языковых пакетов в ОС и перехода на другой язык.

  • То, как вы конвертируете время с AddMinutes и пытается вычислить из-за смещения, неправильно на многих уровнях. Не пишите этот код. Просто используйте ConvertTime и связанные функции из класса TimeZoneInfo.

  • Для альтернативного подхода и лучшей локализации вы можете рассмотреть возможность использования библиотек Noda Time и TimeZoneNames.