Windows时区ASP.NET中的缩写

时间:2010-11-16 15:45:22

标签: c# .net asp.net windows timezone

他们甚至存在吗?我真的厌倦了向我的欧洲用户展示“浪漫标准时间”,并试图解释为什么他们的“中欧时间”不能显示为“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 个答案:

答案 0 :(得分:6)

嗯,即使是“普遍接受的缩写”也不是一个好主意 - 因为它们太模糊了。如果你说“EDT”你的意思是美国的东部夏令时,还是澳大利亚的东部夏令时?

更普遍接受的技术解决方案是使用Olson(zoneinfo)名称(例如“Europe / London”)作为标识符。如何向用户呈现这些是另一回事,但通常我看到用户界面具有特定时区的地名以及与UTC的标准(或当前;它变化)偏移。例如,请参阅Google日历的时区设置。

这实际上是一个国际化(或本地化,我永远不会记住)标识符到用户友好名称的问题,但是你这样做。

答案 1 :(得分:1)

您可以随时构建一个人行横道方法并自行转换。您只需要获取每次的列表,然后自己进行人行道。我不知道Windows中有什么东西可以帮到你,但你自己也不是在说很多代码......