Сокращения часового пояса Windows в ASP.NET - PullRequest
5 голосов
/ 16 ноября 2010

Они вообще существуют? Мне очень надоело показывать «Стандартное романское время» моим европейским пользователям и пытаться объяснить, почему их «Центральноевропейское время» не может отображаться как «CET». Если бы я проанализировал «Стандартное романское время» и подарил им «RST», это было бы для них бессмысленным, или, возможно, его спутали бы с «Стандартным временем России» или прочей ерундой.

Нет ли способа вывести общепринятые сокращения из Windows? Мне нужно что-то, что работает в Северной Америке, Южной Америке, Европе, Африке и Азии.

ОБНОВЛЕНИЕ: Я знаю, что это полный взлом, но, скорее всего, он поможет мне в 90% случаев, которые меня волнуют. Если у вас есть предложения, я все еще уши;)

    /// <summary>
    /// Gets the current time zone abbreviation, corrected for Daylight Saving Time (if applicable)
    /// </summary>
    /// <param name="timeZoneId">The time zone id.</param>
    /// <returns></returns>
    public static string GetTZAbbrev(string timeZoneId)
    {
      var timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();
      var abbrev = string.Empty;

      foreach (var timeZoneInfo in timeZoneInfos)
      {
        if (timeZoneInfo.Id != timeZoneId) continue;

        string[] words;

        if (timeZoneInfo.IsDaylightSavingTime(DateTime.UtcNow))
        {
          words = timeZoneInfo.DaylightName.Split(' ');         
        }
        else
        {
          words = timeZoneInfo.StandardName.Split(' ');         
        }

        foreach (var word in words)
        {
          abbrev += word[0];
        }
      }
      return abbrev;
    }

Ответы [ 2 ]

6 голосов
/ 16 ноября 2010

Ну, даже «общепринятые сокращения» не очень хорошая идея - потому что они настолько неоднозначны. Если вы говорите «EDT», то имеете в виду «восточное летнее время» в США или «восточное летнее время» в Австралии?

Более общепринятым техническим решением является использование имен Олсона (zoneinfo), таких как "Европа / Лондон", в качестве идентификаторов. Как они представляются пользователям, это другой вопрос, но обычно я вижу пользовательские интерфейсы с географическими названиями для определенных часовых поясов вместе с их стандартным (или текущим; оно варьируется) смещением от UTC. См., Например, настройки часового пояса Календаря Google.

Это действительно вопрос интернационализации (или локализации, я никогда не могу вспомнить) идентификаторов для удобных имен, однако вы делаете это.

1 голос
/ 16 ноября 2010

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

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