2

有没有直接的方法可以做到这一点?我想给出一个日期数组作为输入(例如 1997-01-02 1997-01-03... 使用格式 yyyy-mm-dd),如果给定数组的所有元素都一致并且得到 1否则为 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'

现在您可以验证第一块是有效的年份,第二块是有效的月份,等等。

于 2012-06-16T17:03:37.827 回答
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 会将超出正常字段范围的值传递到下一个——第三个示例实际上将被解析为:1119-06-07. 虽然最后一个会抛出异常

于 2012-06-16T17:03:48.120 回答