¿Cómo puedo enumerar todas las zonas horarias en .NETA?

Me gustaría tener una lista de todas las zonas horarias disponibles en una Máquina Windows. ¿Cómo puedo hacer esto en .NETA?

Sé acerca de la TimeZoneInfo.GetSystemTimeZones método, pero esto devuelve sólo el seleccionado de la zona de tiempo(s)

DateTimeOffset current = DateTimeOffset.Now;
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
Console.WriteLine("You might be in the following time zones:");
foreach (TimeZoneInfo timeZoneInfo in timeZones)
{
   //Compare offset with offset for that date in that time zone
   if (timeZoneInfo.GetUtcOffset(current).Equals(current.Offset))
   {
        Console.WriteLine("   {0}", timeZoneInfo.DisplayName);
   }
}
  • El sufrimiento de cut-n-paste-itis? 🙂 Ya está iterando a través de toda la enumeración, pero el filtrado de distancia de los desplazamientos que no es la misma que la actual, con el si de la instrucción.
  • Pasé por alto el si en el código 🙁
InformationsquelleAutor gyurisc | 2009-01-14

4 Kommentare

  1. 42

    No, devuelve cada zona de tiempo de la máquina de Windows sabe acerca de (en mi instalación, que 91). El if declaración de que usted tiene allí es lo que está limitando su salida. Que pero deje el Console.WriteLine parte, y vas a ver todos 91 (o así) de las zonas horarias.

    por ejemplo,

    ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
    
    foreach (TimeZoneInfo timeZoneInfo in timeZones)
      Console.WriteLine("{0}", timeZoneInfo.DisplayName);

    Que debería escribir 91 zonas horarias a la consola.

    • timeZones.Count = 135
  2. 4

    El código funciona muy bien para mí. Aquí está la salida en mi caja:

    Podría ser en el tiempo siguiente
    zonas: (GMT) Casablanca (GMT)

    Greenwich Mean Time : Dublin,

    Edimburgo, Lisboa, Londres (GMT)

    Monrovia, Reykjavik

    Que la de todos los que con el mismo desplazamiento en el momento, que es lo que su código muestra claramente – si usted desea todos las zonas horarias, acaba de quitar el «si» de la parte, como dice Robert.

    Si usted piensa que usted debe ver más zonas, podría decirnos que la zona horaria que usted está en para que podamos trabajar de lo que a otros se debe mostrar?

  3. 3

    Este método se utiliza para enlazar todas las zonas horarias en Dev express Desplegable.
    Espero que sea de ayuda para Alguien.

    private void FillTimeZone(ASPxComboBox ddlTimeZone)
    {   
       ddlTimeZone.DataSource = TimeZoneInfo.GetSystemTimeZones();   
       ddlTimeZone.DataBind();  
       ListEditItem oListEditItem=new ListEditItem();   
       oListEditItem.Text=Helper.SELECT;   
       oListEditItem.Value=Helper.SELECT;   
       ddlTimeZone.Items.Add(oListEditItem);   
       ddlTimeZone.SelectedIndex = 0;
    }
  4. 1

    Si quieres una salida json desde un WebAPI llamada:

    using System;
    using System.Collections.Generic;
    
    namespace MyProject.ViewModels
    {
        public class TimeZoneViewModel
        {
            public readonly List<CTimeZone> CTimeZones;
    
            public TimeZoneViewModel()
            {
                CTimeZones = new List<CTimeZone>();
                foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
                {
                    var tz = new CTimeZone(z.Id, z.DisplayName, z.BaseUtcOffset);
                    CTimeZones.Add(tz);
                }
            }
    
        }
    
        public class CTimeZone
        {
            public string Id { get; set; }
            public string DisplayName { get; set; }
            public TimeSpan BaseUtcOffset { get; set; }
    
            public CTimeZone(string id, string displayName, TimeSpan utcOffset)
            {
                Id = id;
                DisplayName = displayName;
                BaseUtcOffset = utcOffset;
            }
        }
    }

    Luego usarlo en WebAPI:

    [HttpGet("Api/TimeZones")]
    public JsonResult GetTimeZones()
    {
        return Json(new TimeZoneViewModel().CTimeZones);
    }

    De salida:

    [{
        "id": "Dateline Standard Time",
        "displayName": "(UTC-12:00) International Date Line West",
        "baseUtcOffset": "-12:00:00"
      },
      {
        "id": "UTC-11",
        "displayName": "(UTC-11:00) Coordinated Universal Time-11",
        "baseUtcOffset": "-11:00:00"
      },
      {
        "id": "Aleutian Standard Time",
        "displayName": "(UTC-10:00) Aleutian Islands",
        "baseUtcOffset": "-10:00:00"
      },
      {
        "id": "Hawaiian Standard Time",
        "displayName": "(UTC-10:00) Hawaii",
        "baseUtcOffset": "-10:00:00"
      },...

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea