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

时间:2015-03-23 16:33:21

标签: 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#中获得正确的日期呢?

1 个答案:

答案 0 :(得分: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始终将日期表示为双精度。