如何在Java中进行日期甲酸验证

问题描述

我想进行日期格式验证。它应该是 yyyy-mm-dd ,为了达到我的要求,我遵循以下代码,但是它不起作用。

我的输入请求应为 2020-13-08 2020-13-08T23:00:00Z ,但应为 2020-08-13 2020-08-13T23:00:00Z

public static boolean validateJavaDate(String strDate) {

        /*
         * Set preferred date format,For example MM-dd-yyyy,MM.dd.yyyy,dd.MM.yyyy etc.
         */
        SimpleDateFormat sdfrmt = new SimpleDateFormat("yyyy-mm-dd");
        sdfrmt.setLenient(false);
        try {
            Date javaDate = sdfrmt.parse(strDate);
            System.out.println(strDate + " is valid date format");
        }
        catch (ParseException e) {
            System.out.println(strDate + " is Invalid Date format");
            return false;
        }
        return true;
    }

解决方法

最好使用新的java.time包

public static boolean validateJavaDate(String strDate) {
    if (strDate == null || strDate.isEmpty()) { //for completeness 
        System.out.println("Given value can not be null or empty");
        return false;
    }

    DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE;
    try {
        formatter.parse(strDate);
        System.out.println(strDate + " is valid date format");
        return true;
    }
    catch (DateTimeParseException e) {
        System.out.println(strDate + " is Invalid Date format");
        return false;
    }
}

如果目标是同时验证和不验证时间,那么我们可以将实际的解析提取到私有方法中,并使用不同的格式化程序进行调用

private static boolean formatDate(String string,DateTimeFormatter formatter) {
    try {
        formatter.parse(string);
        return true;
    } catch (DateTimeParseException e) {
        return false;
    }

}
public static boolean validateJavaDate(String strDate) {
    if (strDate == null || strDate.isEmpty()) { //for completeness 
        System.out.println("Given value can not be null or empty");
        return false;
    }

    boolean isValid = formatDate(strDate,DateTimeFormatter.ISO_LOCAL_DATE);
    if (!isValid) {
        isValid = formatDate(strDate,DateTimeFormatter.ISO_DATE_TIME);
    }

    if (isValid) {
        System.out.println(strDate + " is valid date format");
    } else {
        System.out.println(strDate + " is Invalid Date format");
    }

    return isValid;
}
,

yyyy-mm-dd匹配小时中的分钟(mm)部分,这就是验证通过的原因。将其替换为yyyy-MM-dd以匹配月份。有关SimpleDateFormat的文档,请参见https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html

,

另一方面,您可以手动进行。

像这样的Somethink

{{1}}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...