【问题标题】:Select only United State Time Zones仅选择美国时区
【发布时间】:2012-04-14 13:19:36
【问题描述】:

有没有一种简单的方法可以创建仅包含美国时区的列表?我正在使用此代码,但它会生成每个时区,我只想要太平洋、中部、山区和东部

public List<TimeZoneInfo> _timeZones = TimeZoneInfo.GetSystemTimeZones().ToList();

【问题讨论】:

  • 添加.Where 并列出您想要的时区。
  • 您是在问如何将 4 个项目添加到列表中?或者你想要一些花哨的 LINQ 查询来做到这一点?

标签: c# timezone


【解决方案1】:

在这里尝试从消防水带中喝水没有什么意义。只需明确询问您想要的:

        var zones = new List<TimeZoneInfo> {
            TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time")
        };

别忘了夏威夷和阿拉斯加:)

【讨论】:

    【解决方案2】:

    可以使用您描述的标准按 ID 过滤它们:

    using System;
    using System.Linq;
    
    class Test
    {
        static void Main()
        {
            var inclusions = new[] { "Pacific", "Central", "Mountain", "Eastern" };
            foreach (var zone in TimeZoneInfo.GetSystemTimeZones()
                          .Where(zone => inclusions.Any(x => zone.Id.Contains(x))))
            {
                Console.WriteLine(zone.Id);
            }
        }
    }
    

    但是,这会得到以下列表:

    Pacific Standard Time (Mexico)
    Pacific Standard Time
    US Mountain Standard Time
    Mountain Standard Time (Mexico)
    Mountain Standard Time
    Central America Standard Time
    Central Standard Time
    Central Standard Time (Mexico)
    Canada Central Standard Time
    SA Pacific Standard Time
    Eastern Standard Time
    US Eastern Standard Time
    Central Brazilian Standard Time
    Pacific SA Standard Time
    SA Eastern Standard Time
    Central Europe Standard Time
    Central European Standard Time
    W. Central Africa Standard Time
    Central Asia Standard Time
    N. Central Asia Standard Time
    AUS Central Standard Time
    AUS Eastern Standard Time
    West Pacific Standard Time
    Central Pacific Standard Time
    

    ...这显然不是你想要的。

    如果您只想要一组特定时区,您最好使用TimeZoneInfo.FindSystemTimeZoneById(id) 硬编码所需时区的ID。

    【讨论】:

      【解决方案3】:

      我创建了一个美国时区列表:

         var zones = new List<TimeZoneInfo> {
          TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"),            
          TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time"),
          TimeZoneInfo.FindSystemTimeZoneById("Alaskan Standard Time"),
      };
      

      【讨论】:

        【解决方案4】:

        我认为这是美国时区的更新列表:

        var timezones = new List<TimeZoneInfo> {
            TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Mountain Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("US Eastern Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"),            
            TimeZoneInfo.FindSystemTimeZoneById("Hawaiian Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Alaskan Standard Time"),
            TimeZoneInfo.FindSystemTimeZoneById("Pacific Standard Time (Mexico)"),
            TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time (Mexico)"),
            TimeZoneInfo.FindSystemTimeZoneById("UTC")
        };
        

        【讨论】:

          【解决方案5】:

          这个怎么样?

          var _timeZones = TimeZoneInfo.GetSystemTimeZones().ToList().Where(zone=>zone.DisplayName.Contains("US"));
          

          【讨论】:

          • 您会错过在 DisplayName 中没有美国但仍然是美国时区的美国领带区
          猜你喜欢
          • 2014-02-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-06-29
          • 1970-01-01
          • 2017-12-26
          • 1970-01-01
          • 2017-11-09
          相关资源
          最近更新 更多