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# - 在 XAML 中为用户控件设置属性

c# - JQuery Ajax 发布到 C#

c# - Windows窗体应用程序C#的HTTP发布

vb.net - SSHAuthenticationExcetion :No suitable authentication method found to complete authentication

c# - 引用组合框中的值时 LINQ 查询出错

c# - 从字符串中删除转义序列 '\' 以将其转换为 XmlDocument

c# - 仅当用户更改值时才会发生的 WPF Slider 事件

c# - 标签文本向上移动

c# - WinForms TreeView 中的三态复选框

c# - Visual C# SQL 语句不会插入到数据库中