有人能指出我的所有时区引用的id在TimeZoneInfo.FindTimeZoneById()的完整列表吗?我在任何地方都找不到一个列表,我已经查看了. net文档。


当前回答

这是经过充分测试并为我工作的代码。你可以复制粘贴到你的aspx页面和cs页面。

这是我的博客,你可以在这里下载完整的代码。谢谢。

http://www.c-sharpcorner.com/blogs/display-all-the-timezone-information-in-dropdown-list-of-a-local-system-using-c-sharp-with-asp-net

<form id="form1" runat="server"> <div style="font-size: 30px; padding: 25px; text-align: center;"> Get Current Date And Time Of All TimeZones </div> <hr /> <div style="font-size: 18px; padding: 25px; text-align: center;"> <div class="clsLeft"> Select TimeZone :- </div> <div class="clsRight"> <asp:DropDownList ID="ddlTimeZone" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlTimeZone_SelectedIndexChanged" Font-Size="18px"> </asp:DropDownList> </div> <div class="clearspace"> </div> <div class="clsLeft"> Selected TimeZone :- </div> <div class="clsRight"> <asp:Label ID="lblTimeZone" runat="server" Text="" /> </div> <div class="clearspace"> </div> <div class="clsLeft"> Current Date And Time :- </div> <div class="clsRight"> <asp:Label ID="lblCurrentDateTime" runat="server" Text="" /> </div> </div> <p> &nbsp;</p> <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Button" /> </form>

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindTimeZone();
            GetSelectedTimeZone();
        }
    }

    protected void ddlTimeZone_SelectedIndexChanged(object sender, EventArgs e)
    {
        GetSelectedTimeZone();
    }

    /// <summary>
    /// Get all timezone from local system and bind it in dropdownlist
    /// </summary>
    private void BindTimeZone()
    {
        foreach (TimeZoneInfo z in TimeZoneInfo.GetSystemTimeZones())
        {
            ddlTimeZone.Items.Add(new ListItem(z.DisplayName, z.Id));
        }
    }

    /// <summary>
    /// Get selected timezone and current date & time
    /// </summary>
    private void GetSelectedTimeZone()
    {
        DateTimeOffset newTime = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(ddlTimeZone.SelectedValue));
        //DateTimeOffset newTime2 = TimeZoneInfo.ConvertTime(DateTimeOffset.UtcNow, TimeZoneInfo.FindSystemTimeZoneById(ddlTimeZone.SelectedValue));
        lblTimeZone.Text = ddlTimeZone.SelectedItem.Text;
        lblCurrentDateTime.Text = newTime.ToString();
        string str;
        str = lblCurrentDateTime.Text;
        string s=str.Substring(0, 10);
        DateTime dt = new DateTime();
        dt = Convert.ToDateTime(s);
       // Response.Write(dt.ToString());
        Response.Write(ddlTimeZone.SelectedValue);

    }

其他回答

我猜这就是大多数人想要的:

微软时区索引值

希望微软即使在XP之后也能保持更新。

这是c#中的SelectListItem (asp .net)

你可以在后台写代码:

public static List<SelectListItem> GetTimezoneList()
{
    try
    {
        // list of timezone
        List<SelectListItem> timezoneList = new List<SelectListItem>();

        timezoneList.Add(new SelectListItem() { Value = "", Text = "Select TimeZone...", Selected = false });
                
        var timezoneInfo = TimeZoneInfo.GetSystemTimeZones();
                
        foreach (var item in timezoneInfo)
        {
            timezoneList.Add(new SelectListItem() 
            {
                Value = item.StandardName, Text = item.DisplayName, Selected = false });
            }
            return timezoneList;
        }
    }
    catch (Exception e)
    {
        throw e;
    }
}

在前端

@Html.DropDownListFor(s => s.TimeZone, YourbackendServiceName.GetTimezoneList(), new { @class = "form-control input-md" })

这将给你所有的时区DisplayName…即印度标准时间 下拉列表

var timeZoneInfos = TimeZoneInfo.GetSystemTimeZones();

上面给出了一个时区列表,其中包括id。

您将在这里找到完整的时区列表及其GMToffsets,您可以使用“时区名称”列值按ID查找时区

e.g

TimeZoneInfo objTimeZoneInfo = TimeZoneInfo.FindTimeZoneById("Dateline Standard Time");

您将得到时区信息类,其中包含用于GMT-12:00的日期线标准时区。

时区标识符列表,默认包含在Windows XP和Vista中:查找本地系统上定义的时区