2

それを行う簡単な方法はありますか?入力として日付の配列を与えたい (たとえば、1997-01-02 1997-01-03... 形式 yyyy-mm-dd を使用)、指定された配列のすべての要素が一貫しており、それ以外の場合は 0。

何か案が?

4

2 に答える 2

1

正規表現を使用してこれを行う多くの方法。いくつかの単純なもの:

str = '1917-01-23';

regexp(str,'\d\d\d\d-\d\d-\d\d')
ans =
     1

文字列がそのパターンに正確に一致する場合は 1 が返され、そうでない場合は空になります。

または、次のようにします。

regexp(str,'-','split')
ans = 
    '1917'    '01'    '23'

これで、最初のピースが有効な年、2 番目のピースが有効な月などを確認できます。

于 2012-06-16T17:03:37.827 に答える
1

ここに1つのアイデアがあります:

d = {
    '1997-01-02'
    '1997-01-03'
    '1111-99-99'
    'not a date'
}

isDateValid = false(size(d));
for i=1:numel(d)
    try
        str = datestr(datenum(d{i},'yyyy-mm-dd'),'yyyy-mm-dd');
        isDateValid(i) = isequal(str,d{i});
    catch ME
    end
end

結果:

>> isDateValid
isDateValid =
     1
     1
     0
     0

変換を前後に行う理由は、MATLAB がフィールドの通常の範囲外の値を次のフィールドに運ぶためです。3 番目の例は、実際には次のように解析されます1119-06-07。最後のものは例外をスローしますが

于 2012-06-16T17:03:48.120 に答える