You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在DataGridView列中将UNIX时间戳转换为DateTime格式显示

解决SQLite UNIX时间戳在DataGridView中显示为DateTime的问题

方法一:SQL查询阶段直接转换

SQLite内置datetime()函数,可直接将UNIX时间戳转换为标准时间格式字符串,无需在C#中额外处理。修改你的查询语句:

// 替换"TimeStampColumn"为数据库中存储时间戳的实际列名
string sql = "Select *, datetime(TimeStampColumn, 'unixepoch') AS DisplayTime FROM Main";

查询结果会新增DisplayTime列,直接绑定到DataGridView即可显示可读的DateTime格式,可通过设置dataGridView1.Columns["TimeStampColumn"].Visible = false隐藏原时间戳列。

方法二:填充DataTable后手动转换

若不想修改SQL,可在DataTable填充完成后新增DateTime类型列,逐行转换时间戳:

string sql = "Select * from Main";

var conn = new SQLiteConnection("Data Source = FistDB.db;Version = 3");
conn.Open();

DataSet ds = new DataSet();
var da = new SQLiteDataAdapter(sql, conn);
da.Fill(ds);

DataTable dt = ds.Tables[0];
// 新增DateTime类型列
dt.Columns.Add("DisplayTime", typeof(DateTime));

foreach (DataRow row in dt.Rows)
{
    long timestamp = Convert.ToInt64(row["TimeStampColumn"]);
    // 秒级时间戳用FromUnixTimeSeconds,毫秒级用FromUnixTimeMilliseconds
    row["DisplayTime"] = DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
}

// 隐藏原时间戳列
dataGridView1.Columns["TimeStampColumn"].Visible = false;
dataGridView1.DataSource = dt;

方法三:通过DataGridView的CellFormatting事件动态转换

这种方式无需修改DataTable,在单元格渲染时实时转换时间戳:

  1. 先完成数据源绑定:
string sql = "Select * from Main";

var conn = new SQLiteConnection("Data Source = FistDB.db;Version = 3");
conn.Open();

DataSet ds = new DataSet();
var da = new SQLiteDataAdapter(sql, conn);
da.Fill(ds);

dataGridView1.DataSource = ds.Tables[0];
  1. 添加CellFormatting事件处理逻辑:
private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
    // 匹配时间戳列名,替换为实际列名
    if (dataGridView1.Columns[e.ColumnIndex].Name == "TimeStampColumn" && e.Value != null)
    {
        if (long.TryParse(e.Value.ToString(), out long timestamp))
        {
            // 根据时间戳精度选择转换方法
            e.Value = DateTimeOffset.FromUnixTimeSeconds(timestamp).LocalDateTime;
            e.FormattingApplied = true;
        }
    }
}

注意事项

  • 若时间戳是毫秒级(13位数字),替换FromUnixTimeSeconds为FromUnixTimeMilliseconds;
  • 确保时间戳列的数值有效,避免转换时抛出异常。

内容的提问来源于stack exchange,提问作者Andrew Kazun

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 12:30:23