Преобразование столбцов DateTime в DataGridView в местное время - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть приложение C# Form, которое имеет сетку данных, которая отображает время начала и окончания встречи, помимо прочего. Я получаю все данные из базы данных MySQL, в которой хранится время в формате UT C. Я хочу преобразовать эти значения времени UT C в местный часовой пояс компьютера. Я испробовал приведенный ниже код, но он не отображается. для работы кто-нибудь может дать мне несколько советов о том, как преобразовать время в местный часовой пояс.

 private void AppointmentsDataGridView_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
    {
        if (e.Value is DateTime)
        {
            e.Value = DateTime.SpecifyKind((DateTime)e.Value, DateTimeKind.Utc);
            e.Value = TimeZoneInfo.ConvertTimeFromUtc((DateTime)e.Value, TimeZoneInfo.Local);
        }
    }

1 Ответ

1 голос
/ 30 апреля 2020

Ваш код выглядит хорошо, как есть, но, вероятно, его можно упростить, используя DateTime.ToLocalTime

if (e.Value is DateTime)
{
    e.Value = ((DateTime) e.Value).ToLocalTime();
}

Если вы используете C# 7.0 или новее, вы можете сделать это даже чище, используя сопоставление с образцом .

if (e.Value is DateTime dt)
{
    e.Value = dt.ToLocalTime();
}

Заранее использовать SpecifyKind необязательно, если только по какой-то причине значение уже не имеет DateTimeKind.Local неправильно присвоено его .Kind свойству. Если это произойдет, я бы посоветовал исправить это, где бы он ни создавался, а не в пользовательском интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...