.net – 存储UTC,在DataGridView中显示本地时间(DataSource = DataTable)

在车队管理中,跟踪器跨时区移动并以时间戳存储其位置,该时间戳始终为UTC.这很好,因为它必须坚持一个时区.否则,如果它改变时区(即夏令时),则它可以具有两个具有相同时间戳的不同位置.

如果车队经理使用我的软件查看数据,他希望在当地时区看到时间,即使他看到混合时间戳(他会知道原因).

为了实现这一点,我将它们作为UTC时间存储在数据库中,并将它们转换为显示它们的本地时间.我用:

DateTime.SpecifyKind(date, dateTimeKind)
DateTime.ToUniversalTime()
DateTime.ToLocalTime()

因此,每个人都应该像高水位的蛤蜊一样快乐,但是有些表被设置为DataGridView的DataSource(Windows.System.Forms.DataGridView.DataSource = System.Data.DataTable).这本身并不坏,但我不知道如何在它们之间进行转换.

如果我可以使用DataGridViewCellStyle.Format属性来指示要显示的时区,我会很高兴,但据我所知,这不是一个选项.现在在一些表中,两次都存储在数据库中,因此用户决定显示/隐藏哪个时间,但如果你必须将数据库中的每个DateTime列加倍并放置显示/隐藏,那么这对于ass来说真是太痛苦了.旁边的功能.

你提出哪种方式?我已经阅读了RowCreatedEvent(here),但我没有构建Web应用程序.

最佳答案 您可以使用CellFormatting事件:

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    if (e.Value is DateTime)
    {
        var date = (DateTime)e.Value;
        var localDate = date.ToLocalTime();
        e.Value = localDate;
        e.FormattingApplied = true;
    }
}
点赞