c# - 将 DateTimePicker 绑定(bind)到 UTC,但以本地时间显示和操作

标签 c# winforms

我在 Windows 窗体中有一个 DateTimePicker,我希望将其绑定(bind)到 UTC 日期时间值。但即使我使用 DateTime.SpecifyKind() 来确保将值 Kind 设置为 UTC,DateTimePicker 控件也不会显示本地时间中的值。有没有办法向用户显示本地时间并允许他们在本地时间操作该值,而绑定(bind)值仍保留 UTC 格式?

最佳答案

您可以信赖FormatParse事件Binding对象。

因此,假设您的数据源中有通用时间:

  • 要在 DateTimePicker 中显示本地时间,您应该处理绑定(bind)的 Format 事件,并使用 ToLocalTime 将值转换为本地时间。 DateTime 的方法
  • 要将世界时间放回数据源,您应该处理绑定(bind)的 Parse 事件,并将来自 DateTimePicker 的本地时间转换回世界时间使用ToUniversalTime

您可以在文档中了解有关这些事件的更多信息:

  • Format :当控件的属性绑定(bind)到数据值时发生。
  • Parse :当数据绑定(bind)控件的值更改时发生。

示例

DataTable dt = new DataTable();
private void Form4_Load(object sender, EventArgs e)
{
    dt.Columns.Add("Column1", typeof(DateTime));

    dateTimePicker1.DataBindings.Add("Value", dt, "Column1");
    dateTimePicker1.DataBindings["Value"].Format += 
        (s, a) => a.Value = ((DateTime)a.Value).ToLocalTime();
    dateTimePicker1.DataBindings["Value"].Parse += 
        (s, a) => a.Value = ((DateTime)a.Value).ToUniversalTime();

    dt.Rows.Add(new DateTime(2000, 1, 1, 13, 0, 0));
}
private void button1_Click(object sender, EventArgs e)
{
    MessageBox.Show(dt.Rows[0]["Column1"].ToString());
}

关于c# - 将 DateTimePicker 绑定(bind)到 UTC,但以本地时间显示和操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58650165/

相关文章:

c# - 使用 C# winform 的 zeromq pub/sub 示例

C#winform绑定(bind)源格式输出字符串到货币,不带$符号

c# - 在 Winforms 上配置控件

c# - 如何编写与语言无关的 double.tryparse?

c# - 在 .NET 核心中使用 app.config 和 ConfigurationManager 是否可取?

c# - 在 if 语句中仅使用具有特定值的参数

linux - 在 linux 机器上执行 C# win 表单应用程序

c# - 如何大写正则表达式模式?

c# - 正则表达式不匹配所有外来字符

c# - 以派生形式更改标签文本,其中标签位于基本形式