2010-04-12 70 views
0

我正在处理一个项目,我必须解析客户端的excel文件以提取数据。有一件奇怪的事情出现在这里:当我在excel表格中以5/9(5月9日)格式解析日期时,我的程序中获得了39577个日期。我不确定年份是否编码在这里(这些表单是2008年)。Excel解析(xls)日期错误

这些日期是自某种时代以来的天数吗?

有谁知道如何将这些数字转换为有意义的东西?我没有寻找一种解决方案,可以在从excel文件解析时正确地转换这些文件(我们已经有成千上万个需要人工选择相关信息的提取文件 - 重新进行提取不是一种选择)。

+0

你用来阅读这个excel文件的工具/语言是什么? – 2010-04-13 06:49:32

回答

1

Excel将日期存储为自0-JAN-1900以来的天数(因此1-JAN-1900将具有值“1”)。你可以找到的Excel如何处理此日期和时间的一个很好的细分:

Dates And Times In Excel

当日期出现在屏幕上在Excel中为“5/9”,“5月9日”,或一些这样的,它是这是一种格式化的技巧,并不代表底层数据值。这听起来像你的解析程序拉动底层的价值,而不是格式化的日期。然而,为了提出修正,我需要知道你的解析程序是什么(Excel宏,公式,外部代码等)。

0

您所需要做的就是正确格式化单元格。或者我误解了你的问题 - 你是说你想在Excel之外做?我不确定。如果结果是愚蠢的,我会删除这个答案。

1

DateTime.FromOADate(如果您使用.NET)是您想要的方法。 Excel日期存储为双打。如果您在1900年的前两个月有日期,那么您可能会遇到Excel 1900闰年错误。

http://msdn.microsoft.com/en-us/library/system.datetime.fromoadate.aspx

双精度浮点数 表示日期的天数 之前或基准日之后, 午夜,12月30日1899年标志 和积分d编码的一部分,如从 1899年12月,30的正或负天 位移和d的 小数部分的绝对值的时间 编码一天中的时间作为 一天的一小部分从午夜的位移。 d必须是 ,负值为657435.0 ,正值为2958466.0。