在 Excel 单元格中,我输入 12,如果我将其格式设置为日期,则它是 1/12/1900。 在 C# 中,我使用 DateTime.FromOADate(12),它返回 1/11/1900。 但如果我将 411 放入 Excel 并将其格式化为日期,则它将是 2/14/1901。 在 C# 中,DateTime.FromOADate(411) 也返回 2/14/1901。 我对这种差异感到困惑。那么如何在 C# 中获得正确的日期呢?
最佳答案
这是 Excel 的一个怪癖,它模拟 Lotus 1-2-3 的兼容性错误。 1900 年不是闰年,但 Excel 将其视为闰年,以兼容 Lotus 1-2-3 bug。 OLE 日期/时间处理不正确。
关于这个问题有一个有趣的轶事:http://www.joelonsoftware.com/items/2006/06/16.html
如果您需要解决此问题并模拟 1900 年 3 月 1 日之前的 Excel 行为,您可以设置 double 值而不是日期,并执行 DateTime 到 double 值的转换,这也考虑了 Excel 错误。无论如何,Excel 内部始终将日期表示为 double 。
关于c# - DateTime.FromOADate 返回与 Excel 中的日期不同的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29215490/