从excel读取时,日期不会完全转换

时间:2014-09-04 00:31:05

标签: excel openxml

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

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

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

当我执行此计算以转换为日期时:

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

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

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

由于

3 个答案:

答案 0 :(得分:2)

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

因此,根据Excel的精确度,数字41844.446908680555会转换为

  • 2014年7月24日10:43:32.910

(实际上: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。

这样做的原因是现在允许在数学函数中使用日期。它还处理了很多问题,这些问题会弹出日期,例如闰年,也可以提供更简单的方法来处理时区。