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

C#中如何将Excel返回的日期数字字符串(如44165)转为DateTime?

C# 转换Excel日期序列号为DateTime

你拿到的"44165"是Excel的日期序列号——Excel会把日期存储为从1900年1月1日开始累计的天数(注意Excel有个历史bug:错误地将1900年判定为闰年,导致序列号>=60时需要修正)。直接用Convert.ToDateTime这类方法当然会报错,因为它们是用来解析日期格式字符串的,而非数字序列号。

直接用C#手动转换的代码如下:

// 你的Excel日期序列号字符串
string excelDateSerialStr = "44165";

if (double.TryParse(excelDateSerialStr, out double excelSerial))
{
    // Excel Windows版的基准日期
    DateTime excelBase = new DateTime(1900, 1, 1);
    
    // 修正1900年闰年bug:Excel认为1900年有2月29日,实际没有,所以序列号>=60时要减1天
    if (excelSerial >= 60)
    {
        excelSerial -= 1;
    }
    
    // 计算最终日期:基准日期加上(序列号-1)天,因为Excel把1900-01-01算作序列号1
    DateTime targetDate = excelBase.AddDays(excelSerial - 1);
    
    // 输出结果:2021-11-30
    Console.WriteLine(targetDate.ToString("yyyy-MM-dd"));
}
else
{
    // 处理转换失败的情况,比如输入不是有效数字
    Console.WriteLine("输入的不是有效的Excel日期序列号");
}

补充说明

如果是Mac版Excel,基准日期是1904年1月1日,此时只需把excelBase改成new DateTime(1904, 1, 1),并且不需要处理1900年的bug(Mac版Excel没有这个问题)。

内容的提问来源于stack exchange,提问作者Daniel Ilie

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 17:42:14