我正在阅读一个Excel电子表格。
电子表格中的值为7/24/2014 10:43:33 AM
使用OpenXML读取后的单元格值为41844.446908680555
。
当我执行此计算以转换为日期时:
dte = DateTime.FromOADate(double.Parse(value));
我得到7/24/2014 10:43:32 AM
转换日期/时间时这是典型的还是我错过了什么?
由于
答案 0 :(得分:2)
似乎是DateTime.FromOADate(double.Parse(value));是截断而不是舍入小数秒。 Excel将日期/时间存储为自1900年1月1日以来的天数和分数(故意错误地称1900为闰年,据说当时与Lotus 123兼容)。
因此,根据Excel的精确度,数字41844.446908680555会转换为
(实际上:2014年7月24日10:43:32.9099949030205)
答案 1 :(得分:0)
只需将单元格格式化为日期即可。 41844.446908680555是Excel序列化日期值的方法。
答案 2 :(得分:0)
当Excel以商店格式存储日期或时间时,日期为1900年1月1日= 1 所以,当您存储日期格式的日期时,您实际上只是存储日期与1900年1月1日之间差异的数值
所以例如365 = jan-30-1900
当天数量的一小部分等于.5 =半天或12小时。
现在它的乐趣= 41885.75或2014年9月3日至下午6点或1900年1月1日41885.75。
这样做的原因是现在允许在数学函数中使用日期。它还处理了很多问题,这些问题会弹出日期,例如闰年,也可以提供更简单的方法来处理时区。