c# - ASP.NET 中的 Windows 时区缩写

标签 c# .net asp.net windows timezone

它们真的存在吗?我真的厌倦了必须向我的欧洲用户显示“浪漫标准时间”并试图解释为什么他们的“中欧时间”不能显示为“CET”。如果我解析“Romance Standard Time”并向他们展示“RST”,这对他们来说毫无意义,或者可能被混淆为“Russian Standard Time”或其他废话。

有没有办法从 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;
    }

最佳答案

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

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

这实际上是一个将标识符国际化(或本地化,我永远记不起来)的问题,不管你怎么做。

关于c# - ASP.NET 中的 Windows 时区缩写,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4195948/

相关文章:

c# - 单元测试错误 : This function can only be invoked from LINQ to Entities

具有数据格式或模式的 C# DateTime.ToString

c# - self 跟踪实体的目的是什么?

c# - 在实体、优点和缺点中仅放置 FK 的键类型 (id) 或类类型

asp.net - ASP.NET 4.5 Web 窗体中的脚本管理器 - 它有什么作用?你如何使用它的捆绑和缩小?

.net - Asp.Net 4.0 中的 ViewStateMode 属性

c# - winforms listview 不在详细 View 中显示项目

c# - Json序列化为空

c# - Json.NET 初始化抛出 System.TypeLoadException

javascript - 如何检查单个 asp.net 按钮单击事件中的所有 asp.net 复选框?