我想要一个Windows机器上所有可用时区的列表。我怎么能在.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);
}
}
答案 0 :(得分:42)
不,它没有,它返回Windows机器知道的每个时区(在我的安装中,那是91)。您拥有的if
语句限制了您的输出。拿出来然后离开Console.WriteLine
部分,你会看到所有91个(左右)时区。
e.g。
ReadOnlyCollection<TimeZoneInfo> timeZones = TimeZoneInfo.GetSystemTimeZones();
foreach (TimeZoneInfo timeZoneInfo in timeZones)
Console.WriteLine("{0}", timeZoneInfo.DisplayName);
应该将91个时区写入你的控制台。
答案 1 :(得分:4)
您的代码适用于我。这是我的盒子上的输出:
您可能在以下时间 区域:(GMT)卡萨布兰卡(GMT)
格林威治标准时间:都柏林,
爱丁堡,里斯本,伦敦(GMT)
蒙罗维亚,雷克雅未克
这就是目前具有相同偏移量的所有内容,这是您的代码清晰显示的内容 - 如果您想要所有时区,只需删除“if”部分,如Robert所说。 / p>
如果你认为你应该看到更多区域,你能告诉我们你所在的时区吗?我们可以弄清楚应该展示哪些区域?
答案 2 :(得分:3)
此方法用于绑定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;
}
答案 3 :(得分:1)
如果想要从WebAPI调用获得json输出:
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"
},...