DateTime.FromOADate从Excel中的日期返回不同的日期

too*_*ive 2 c# excel datetime

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

Gov*_*ert 5

这是一个Excel怪癖,它模拟Lotus 1-2-3错误以实现兼容性.1900年不是闰年,但Excel将其视为与Lotus 1-2-3错误兼容的闰年.正确处理OLE日期/时间不会.

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

如果您需要在1900年3月1日之前解决此问题并模拟Excel行为,则可以设置双重而不是日期,并执行DateTime以双重转换,这也会影响Excel错误.内部Excel始终将日期表示为双精度数.