Windows时区ASP.NET中的缩写

Mar*_*man 5 .net c# windows asp.net 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;
    }
Run Code Online (Sandbox Code Playgroud)

Jon*_*eet 6

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

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

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


Bro*_*sto 1

您始终可以构建人行横道方法并自行转换它们。您只需要获取每个时间的列表,然后自己过马路即可。我不知道 Windows 中是否有任何东西可以为您提供此功能,但您并没有讲很多代码来自己完成它......