我在 Windows 窗体中有一个 DateTimePicker,我希望将其绑定(bind)到 UTC 日期时间值。但即使我使用 DateTime.SpecifyKind() 来确保将值 Kind 设置为 UTC,DateTimePicker 控件也不会显示本地时间中的值。有没有办法向用户显示本地时间并允许他们在本地时间操作该值,而绑定(bind)值仍保留 UTC 格式?
最佳答案
您可以信赖Format
和 Parse
事件Binding
对象。
因此,假设您的数据源中有通用时间:
- 要在
DateTimePicker
中显示本地时间,您应该处理绑定(bind)的Format
事件,并使用ToLocalTime
将值转换为本地时间。DateTime
的方法 - 要将世界时间放回数据源,您应该处理绑定(bind)的
Parse
事件,并将来自DateTimePicker
的本地时间转换回世界时间使用ToUniversalTime
您可以在文档中了解有关这些事件的更多信息:
示例
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/