Выберите только United State Time Zones

Есть ли простой способ создать список только часовых поясов в США? Я использую этот код, но он производит каждый часовой пояс, и я хочу только Тихого, Центрального, Горового и Восточного

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

Ответ 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

Ну, вы можете просто отфильтровать их по идентификатору, используя именно те критерии, которые вы описали:

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).

Ответ 3

Как насчет этого?

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

Ответ 4

Я создал список часовых поясов США:

   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"),
};

Ответ 5

Я думаю, что это обновленный список часовых поясов США:

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")
};