Как мне перечислить все часовые пояса в .NET? - PullRequest
26 голосов
/ 14 января 2009

Я хотел бы иметь список всех часовых поясов, доступных на Windows Machine. Как я могу сделать это в .NET?

Я знаю о методе TimeZoneInfo.GetSystemTimeZones, но он возвращает только текущий выбранный часовой пояс (ы)

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

Ответы [ 4 ]

42 голосов
/ 14 января 2009

Нет, это не так, он возвращает каждый часовой пояс, о котором машина Windows знает (в моей установке это 91). Ваше заявление if ограничивает ваш вывод. Возьмите это, но оставьте часть Console.WriteLine, и вы увидите все 91 (или около того) часовых поясов.

, например

ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();

foreach (TimeZoneInfo timeZoneInfo in timeZones)
  Console.WriteLine("{0}", timeZoneInfo.DisplayName);

Это должно записать 91 часовой пояс на вашу консоль.

4 голосов
/ 14 января 2009

Ваш код отлично работает для меня. Вот вывод на мой ящик:

Вы можете быть в следующий раз зоны: (GMT) Касабланка (GMT)
Среднее время по Гринвичу: Дублин,
Эдинбург, Лиссабон, Лондон (GMT)
Монровия, Рейкьявик

Это все с одинаковым смещением на данный момент, что четко отображает ваш код - если вы хотите все часовые пояса, просто удалите часть "если", как говорит Роберт.

Если вы считаете, что должны видеть больше зон, не могли бы вы сказать нам, в каком часовом поясе вы находитесь, чтобы мы могли определить, какие другие должны отображаться?

3 голосов
/ 07 января 2011

Этот метод используется для привязки всех часовых поясов в Dev Express Drop Down. Надеюсь, это кому-нибудь поможет.

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;
}
1 голос
/ 13 июля 2016

Если требуется вывод json из вызова 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;
        }
    }
}

Затем используйте его в WebAPI:

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

Выход:

[{
    "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"
  },...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...