2012-03-30 26 views
10

¿Existe una manera fácil de crear una lista de las zonas horarias únicas en EE. UU.? Estoy utilizando el código sino que produce todas las zonas horarias y yo sólo quiero Pacífico, América Central, Montaña, y orientalSeleccionar solo zonas horarias de Estados Unidos

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

Agregue un '.Where' y enumere las zonas horarias que desee. – cadrell0

+0

¿Estás preguntando cómo agregar 4 elementos a una lista? O quieres alguna consulta LINQ elegante para hacer eso? –

Respuesta

16

No tiene sentido tratar de beber de la manguera de incendios aquí. Sólo pregunte por los cuáles desea explícitamente:

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

No se olvide de Hawai y Alaska :)

4

Bien se podría simplemente filtrarlas por ID usando exactamente los criterios que has descrito:

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

sin embargo, esto tiene la siguiente lista:

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 

... que obviamente no es exactamente lo que desea.

Si sólo desea un conjunto específico de las zonas horarias, es probable que mejor simplemente difícil de codificación de los identificadores de las que desee, utilizando TimeZoneInfo.FindSystemTimeZoneById(id).

0

¿Qué tal esto?

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

echará de menos las zonas de empate de EE. UU. Que no tienen EE. UU. En DisplayName, pero sigue siendo una zona horaria de EE. UU. – HaBo

0

creé una lista de husos horarios de Estados Unidos:

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

creo que esto es una lista actualizada de zonas horarias de los EE. UU .:

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