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

C#:填充DataGridView前将序号日期47028转为yyyy/MM/dd格式

解决序号日期转yyyy/MM/dd格式的问题

你之前的代码跑不起来,核心问题是用错了解析逻辑:DateTime.ParseExact是用来解析已经是标准日期格式的字符串(比如"2024/05/20"),但你的输入"47028"是纯数字的日期序号,和"yyyy/MM/dd"格式完全不匹配,自然会报错。

这种数字序号大概率是Excel风格的日期序列号(以1900年1月1日为第1天),要完成转换,我们需要先把序号转成整数,再基于基准日期算出对应的DateTime,最后格式化为你需要的字符串。

完整代码示例

using System.Globalization;

// 假设你的序号字符串是str
string str = "47028";

// 先把字符串转成整数,用TryParse避免转换失败抛出异常
if (int.TryParse(str, out int serialNumber))
{
    // Excel的日期基准是1900年1月1日,序号1对应1900/01/01,所以要减1天
    DateTime baseDate = new DateTime(1900, 1, 1);
    DateTime targetDate = baseDate.AddDays(serialNumber - 1);
    
    // 格式化为yyyy/MM/dd格式的字符串
    string formattedDate = targetDate.ToString("yyyy/MM/dd", CultureInfo.InvariantCulture);
    
    // 这里把formattedDate填充到DataGridView对应的单元格即可
    // 比如 dataGridView1.Rows[0].Cells["DateColumn"].Value = formattedDate;
}
else
{
    // 处理序号不是有效整数的情况,比如给个默认值或者提示
    Console.WriteLine("无效的日期序号");
}

注意事项

  • 如果你的序号基准不是1900年1月1日(比如某些系统用1970年1月1日为基准),只需要修改baseDate的值即可,比如new DateTime(1970, 1, 1),这时候不需要减1,直接AddDays(serialNumber)就行。
  • 用int.TryParse而不是int.Parse可以避免输入无效字符串时抛出异常,让程序更健壮。
  • 格式化时指定CultureInfo.InvariantCulture可以确保在不同区域设置下,日期分隔符始终是/,不会被系统默认的分隔符替换。

内容的提问来源于stack exchange,提问作者bryan tetris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:55:36