それを行う簡単な方法はありますか?入力として日付の配列を与えたい (たとえば、1997-01-02 1997-01-03... 形式 yyyy-mm-dd を使用)、指定された配列のすべての要素が一貫しており、それ以外の場合は 0。
何か案が?
それを行う簡単な方法はありますか?入力として日付の配列を与えたい (たとえば、1997-01-02 1997-01-03... 形式 yyyy-mm-dd を使用)、指定された配列のすべての要素が一貫しており、それ以外の場合は 0。
何か案が?
正規表現を使用してこれを行う多くの方法。いくつかの単純なもの:
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 番目のピースが有効な月などを確認できます。
ここに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
。最後のものは例外をスローしますが