使用DateFormat的parse方法前校验字符串是否为日期处理


最近在做OCR图片识别的时候,出现日期转换的过程,但是在转换的过程中你懂得,OCR识别出来的数据是五花八门的,什么样的都有,在转换之前一般都需要进行一个处理,或者进行判断,常规的字符串还好,但是碰到日期类的,如果直接使用SimpleDateFormat的时候,会仍异常,那数据就都废了,所以需要一个方法先校验下日期是否合法,下面的方法是在网上找到的,借鉴并记录下(虽然感觉不是很正规,但是满足需求)

  1. 起初的时候是使用的如下方法进行校验
    1
    2
    3
    4
    5
    6
    7
    8
    9
    private boolean checkDate(String content) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    try {
    sdf.parse(content);
    return true;
    } catch (Exception e){
    return false;
    }
    }
    但是上面的会出现问题就是“2021-4-8asdasd”这种情况返回的也是true,查看相关的API,表示如下:
    在默认情况下,进行的分析是不严格的:如果输入的形式不是此对象的格式化方法使用的形式,但仍可作为日期进行分析,则分析将获得成功。客户机可能通过调用setLenient(false)来强调严格遵守该格式
    因此有了如下的代码
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    private boolean checkDate(String content) {
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-M-d");
    try {
    sdf.setLenient(false);
    content = content.replaceAll("-0", "-");
    Date d = sdf.parse(content);
    String s = sdf.format(d);
    return content.equals(s);
    } catch (Exception e){
    return false;
    }
    }