从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闰年等问题,也提供了更方便的方法来处理时区。