java - 我想编写一个通用函数,其中对于这些有效的日期格式 MM/dd/yyyy、M/dd/yyyy 或 M/d/yyyy,函数返回 true

标签 java validation date

我有一个包含以下数据的平面文件

2/12/2016
2/3/2017
12/23/2017
04/23/2017

第一个是 M/dd/yyyy,第二个是 M/d/yyyy,其余日期格式为 MM/dd/yyyy。我正在使用以下函数来检查上述数据文件的数据有效性。

public static boolean isValidDateFormat(String format, String value) 
    {
        boolean Retval = false;
        Date date = null;
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        date = sdf.parse(value);
        if (value.equals(sdf.format(date))) {
                    Retval= true;
        }
        return Retval;
    }

我必须在循环内检查日期有效性,并且只能传递一种日期格式,例如 isValidDateFormat("MM/dd/yyyy", "2/12/2016")。上面的函数返回 前两个值的 false其余值的 true

我想编写一个通用函数,其中对于这些有效的日期格式 MM/dd/yyyy、M/dd/yyyy 或 M/d/yyyy,函数返回 true。

最佳答案

使用 java.time API,您的方法可以重写为这个

public static boolean isValidDateFormat(String value){
    try {
        LocalDate.parse(value, DateTimeFormatter.ofPattern("M/d/uuuu").withResolverStyle(ResolverStyle.STRICT));
    } catch (DateTimeParseException e) {
        return false;
    }
    return true;
}

这将为 MM/dd/yyyy、M/dd/yyyy、MM/d/yyyy、M/d/yyyy 返回 true

我们需要在这里明确指定 ResolveStyle。 Java 默认使用 ResolverStyle.SMART。这允许您为每个月输入 1 - 31 范围内的天数,Java 会将无效天数(例如 2 月 30 日)转换为该月的最后一个有效天数。

我们在这里不需要那种“智能”行为,因此需要 ResolverStyle.STRICT


这不是那么简洁或简短,但效果也不错:

public static boolean isValidDateFormat(String value){
    String[] sa = value.split("/");
    if (sa[2].length() != 4) return false;
    try {
        LocalDate.of(Integer.parseInt(sa[2]), Integer.parseInt(sa[0]), Integer.parseInt(sa[1]));
    } catch (DateTimeException e) {
        return false;
    }
    return true;
}

关于java - 我想编写一个通用函数,其中对于这些有效的日期格式 MM/dd/yyyy、M/dd/yyyy 或 M/d/yyyy,函数返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43614449/

相关文章:

java - Java中的加权随机性

java - ElasticSearch Edge-ngram 不工作

java - android studio 在将字符串添加到 textview 时给出不兼容的类型

c# - WPF 验证无需更新数据源

php - 获取PHP中两个日期之间的所有月份

Java - GAE 数据存储以特定格式保存日期

java - JAXB 构建不正确的 XML

Spring MockMVC - 如何模拟在 Controller 外部运行的自定义验证器

ruby - Rails 将子错误与父错误合并

java - 比较两个数组列表以返回最新日期