在日期时间数组中查找

时间:2016-03-20 14:50:27

标签: matlab date floating-point

我有两个excel文件,每个文件都有日期。目标是在文件B中的文件A中找到日期时间的位置。

e.g。 Excel文件A具有日期,每小时在AJ1970 1 AM到31Dec2015 1AM的A列中,随机缺少大量日期和小时。

Excel文件B有日期,例如1jan1978 5PM

我在名为A的数组中读取文件A并执行以下操作:

ind = find( x2mdate(A) == x2mdate(28491.7083333333) ); %datestr(x2mdate(28491.7083333333)) ans = 01-Jan-1978 17:00:00

它返回空,即使我可以看到1/1/1978文件A中的所有小时都可用。

这显然是一个四舍五入的问题。那么,我该如何处理呢?我尝试使用datestr,但速度非常慢。

2 个答案:

答案 0 :(得分:2)

而不是x2mdate(28491.7083333333),请尝试使用:

datenum('01-Jan-1978 17:00:00', 'dd-mmm-yyyy HH:MM:SS')

很容易看出,由于四舍五入,它们被认为是平等的:

>> datenum('01-Jan-1978 17:00:00', 'dd-mmm-yyyy HH:MM:SS') == x2mdate(28491.7083333333)
ans =
     0

答案 1 :(得分:1)

您正在与错误的值进行比较。 28491.7083333333略微偏离您所寻找的价值。如果要使用与常量浮点数的精确匹配,you have to use 17 digits。否则与合理的容差进行比较。

tol=datenum(0,0,0,0,0,60) %60 seconds tolerance
ind = find( abs(x2mdate(A) - x2mdate(28491.7083333333)<tol );