首页 > 解决方案 > 将 DataGridView 中的 DateTime 列转换为本地时区

问题描述

我有一个 C# 表单应用程序,它有一个 datagridview 显示约会开始时间和约会结束时间等等。我从存储 UTC 时间的 MySQL 数据库中获取所有数据,我想将这些 UTC 时间转换为计算机的本地时区我已经尝试了下面的代码,但它似乎没有工作任何人都可以给我一些有关如何将时间转换为本地时区的建议。

 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);
        }
    }

标签: c#mysqlwinformsdatetimetimezone

解决方案


您的代码看起来不错,但可以使用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属性。如果是这样,我建议在创建它的任何地方修复它,而不是在 UI 中。


推荐阅读