DateTime.FromOADate返回Excel中date的不同date

在一个Excel单元格中,我把12,如果我格式化为Date,那么它是1/12/1900。 在C#中,我使用DateTime.FromOADate(12),它返回1/11/1900。 但如果我把411放在Excel中,并将其格式化为date,则将是2/14/1901。 在C#中,DateTime.FromOADate(411)也返回2/14/1901。 我对这个差异感到困惑。 那么我怎样才能在C#中获得正确的date呢?

这是一个Excel怪癖,它模拟了Lotus 1-2-3的兼容性问题。 1900年不是一个闰年,但Excel将它视为一个闰年,与Lotus 1-2-3的缺陷兼容。 OLEdate/时间处理正确没有。

有关这个问题的这个有趣的轶事: http : //www.joelonsoftware.com/items/2006/06/16.html

如果您需要解决此问题并在1900年3月1日之前模拟Excel行为,则可以设置double而不是date,然后执行DateTime来双倍转换以同样尊重Excel错误。 内部Excel总是代表date双打无论如何。