2016-03-20 17 views
0

私は、それぞれに日付を持つ2つのExcelファイルがあります。目的は、ファイルBのファイルAにおける日付時刻の場所を見つけることである。配列で検索する

ExcelファイルAには、1Jan1970 1AMから31Dec2015 1AMまでの列Aに日付と時間があります。ランダムな欠落日時が多数あります。

ExcelファイルBには日付があります。 1jan1978午後5時

私はAと呼ばれる配列にファイルAを読んで、次の操作を行います。

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

それは私が1978年1月1日のすべての時間は、ファイルA

で利用可能であることを見ることができていても空を返します

これは明らかに丸めの問題です。だから私はこれにどのように対処するのですか?私はdatestrを使ってみましたが、非常に遅いです。

答えて

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); 
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