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
相关产品推荐
相关产品推荐

