Привязать DateTimePicker к UTC, но отображать и манипулировать по местному времени - PullRequest
2 голосов
/ 31 октября 2019

У меня есть DateTimePicker в Windows Forms, который я хочу привязать к значению UTC DateTime. Но даже если я использую DateTime.SpecifyKind (), чтобы убедиться, что значение Kind установлено в UTC, элемент управления DateTimePicker не отображает значение в местном времени. Есть ли способ представить местное время пользователю и позволить ему манипулировать значением по своему местному времени, пока привязанное значение остается в UTC?

1 Ответ

2 голосов
/ 01 ноября 2019

Вы можете положиться на Format и Parse событие Binding объекта.

Итак, если выиметь универсальное время в источнике данных:

  • Чтобы показать местное время в DateTimePicker, вы должны обработать Format событие привязки и преобразовать значение в местное время, используя ToLocalTime метод DateTime
  • Чтобы вернуть универсальное время обратно в источник данных, вы должны обработать Parse событие привязки и преобразовать местное время, которое приходит с DateTimePicker, обратно в универсальноевремя, используя ToUniversalTime

Вы можете узнать больше об этих событиях в документах:

  • Format: Происходиткогда свойство элемента управления привязано к значению данных.
  • Parse: происходит при изменении значения элемента управления с привязкой к данным.

Пример

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());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...