从excel中读取date并不完全正确

我有一个正在阅读的Excel电子表格。

电子表格中的值是7/24/2014 10:43:33 AM

使用OpenXML读取后的单元格值是41844.446908680555

当我做这个计算转换为一个date:

 dte = DateTime.FromOADate(double.Parse(value)); 

我得到了7/24/2014 10:43:32 AM

这是典型的时候转换date/时间还是我错过了什么?

谢谢

看来DateTime.FromOADate(double.Parse(value)); 截断而不是舍入小数秒。 Excel将date/时间存储为自1900年1月1日以来的几天和几分之一天(故意错误地称为1900年闰年,据推测当时与Lotus 123兼容)。

因此,数字41844.446908680555转换为,Excel的精度水平

  • 7/24/2014 10:43:32.910

(实际上:7/24/2014 10:43:32.9099949030205)

只需格式化单元格作为date。 41844.446908680555是Excel的序列化date值的方式。

当Excel将date或时间存储在数字格式中,date为1900年1月1日= 1时,确实如此,当您使用date格式存储date时,实际上只是存储date之间的差值的数字值和1900年1月1日

所以例如365 = 1月30日至19日

而一天中数量相等的部分如此.5 =半天或12小时。

为了它的乐趣,现在= 41885.75或9-11-3-2014在下午6点或41885.75从1900年1月1日。

之所以这样做是因为现在允许在math函数中使用date。 它处理了很多popup闰年等问题,也提供了更方便的方法来处理时区。