【问题标题】:Get a Time Zone StandardName (Not Local)获取时区标准名称(非本地)
【发布时间】:2016-04-13 10:09:04
【问题描述】:

首先我会说我在 C# 方面没有那么丰富的经验,我正在编写一个 Windows 窗体应用程序,它写入一个 XML 文件,PowerShell 稍后可以从不同点读取元素在配置期间。

我创建了一个枚举时区显示名称的组合框,效果很好。

ReadOnlyCollection<TimeZoneInfo> systemTimeZones;
systemTimeZones = TimeZoneInfo.GetSystemTimeZones();
cbTimeZone.DataSource = systemTimeZones;
cbTimeZone.BindingContext = new BindingContext();

我正在尝试在 ComboBox 中获取所选 DisplayName 时区的 StandardName。我找到了 TimeZoneInfo.Local.StandardName 但这不是我想要的,因为我不关心当前的系统信息。我想为 ComboBox 使用 SelectedIndexChanged 事件以在标签中显示 StandardName。似乎必须有一种简单的方法让我错过了过去 2 天的阅读。

【问题讨论】:

  • Wanderlust - 您说您使用的是 WPF,但 DataSourceBindingContext 是 WinForms 组合框属性。它们在 WPF 中不存在。是哪个?
  • Matt:如果使用 UTC 完成传输,则不需要时区。在回答问题时,您必须确保代码的设计以及语法和用法正确。如果应用程序无法运行,则修复编码问题是没有意义的。
  • @jdweng - OP 根本没有询问传输时间值或转换时间。您似乎建议他们根本不创建时区选择器,但没有任何依据,因为我们没有任何关于如何使用此选择器的信息。 UTC 不是灵丹妙药。确实存在需要向用户询问他们的时区的情况。关于 WPF 与 WinForms 的问题,这确实很重要,因为没有它就无法正确回答问题。
  • 对不起,马特。这是一个 Windows 窗体应用程序,我更新了原始问题。我在 WPF 中修改并发布了 WPF。

标签: c# winforms c#-4.0 timezone


【解决方案1】:

使用 TimeZoneInfo 类,例如

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        foreach (var zone in TimeZoneInfo.GetSystemTimeZones())
        {
            cbTimeZones.Items.Add(zone.DisplayName);
        }
    }

    private void cbTimeZones_SelectedIndexChanged(object sender, EventArgs e)
    {
        var zone = TimeZoneInfo.GetSystemTimeZones().Single(x => x.DisplayName == ((ComboBox)sender).SelectedItem.ToString());
        lblTimeZone.Text = TimeZoneInfo.FindSystemTimeZoneById(zone.Id).StandardName;
    }
}

【讨论】:

  • 感谢您的回答,马特。我错过了如何获取 FindSystemTimeZoneById,因为据我所知,它与 StandardName 相同。我似乎只能在使用 TimeZoneInfo 时获得 DisplayName。我已经看到了很多 Console.WriteLine 输出示例,但我不确定如何将其更改为表单。
  • @Wanderlust - 您的组合框应该显示 DisplayName,并使用Id 作为项目的关联。跨度>
  • 谢谢,马特!这非常适合从 ID 中获取 StandardName!我只是想弄清楚如何使 ComboBox 仍然显示 DisplayName 以便更容易从列表中进行选择。如果可能的话,我认为它必须将 ComboBox (DisplayName) 转换为 ID,然后从 ID 转换为 StandardName。
  • 谢谢你,马特!效果很好。我永远不会得到那个。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 2011-12-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-01
  • 1970-01-01
  • 2013-08-17
  • 2020-07-23
相关资源
最近更新 更多