zona horaria timezone

timezone - ¿Cómo enumero todas las zonas horarias en.NET?



datetime zona horaria c# (4)

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

Es posible que se encuentre en las siguientes zonas horarias: (GMT) Casablanca (GMT)
Hora media de Greenwich: Dublín,
Edimburgo, Lisboa, Londres (GMT)
Monrovia, Reykjavik

Esos son todos los que tienen la misma compensación en este momento, que es lo que su código muestra claramente: si quiere todas las zonas horarias, simplemente elimine la parte "si", como dice Robert.

Si crees que deberías ver más zonas, ¿podrías decirnos en qué zona horaria estás para que podamos determinar qué otras deberían mostrarse?

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

Sé sobre el método TimeZoneInfo.GetSystemTimeZones, pero esto solo devuelve las zonas horarias actualmente seleccionadas

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


Este método se utiliza para enlazar todas las zonas horarias en Dev express Drop Down. Espero que ayude a 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; }


No, no, devuelve todas las zonas horarias que la máquina de Windows conoce (en mi instalación, eso es 91). La declaración if que tienes allí es lo que limita tu salida. Elimínalo, pero deja la parte Console.WriteLine y verás las 91 zonas horarias (más o menos).

p.ej

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

Eso debería escribir 91 zonas horarias en su consola.


Si quiere una salida json de una llamada WebAPI:

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 utilícelo en WebAPI:

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

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" },...