在MATLAB中检查日期的一致性

时间:2012-06-16 16:33:15

标签: validation matlab datetime date

有没有直接的方法呢?我想给出一个日期数组作为输入(例如1997-01-02 1997-01-03 ...使用格式yyyy-mm-dd)并且如果给定数组的所有元素都是一致的则得到1并且否则为0。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

使用regexp执行此操作的方法很多。几个简单的:

str = '1917-01-23';

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

如果字符串与该模式完全匹配,则会得到1,否则为空。

或者这样做:

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

现在您可以验证第一件作品是有效年份,第二件作品是有效月份等等。

答案 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将超出正常范围的字段的值传递到下一个 - 第三个示例实际上将被解析为:1119-06-07。而最后一个将抛出异常