首页 > Java > java教程 > 如何在 Java 中验证日期字符串格式而不解析为日期对象?

如何在 Java 中验证日期字符串格式而不解析为日期对象?

Mary-Kate Olsen
发布: 2024-11-06 07:22:02
原创
1009 人浏览过

How to Validate a Date String Format in Java without Parsing to a Date Object?

Java:根据指定要求检查字符串的日期格式

问题:

如何确定给定的字符串是否遵循 Java 中的特定日期格式?我想避免将字符串转换为日期对象,而只专注于验证其格式。

答案:

Java 8 :

利用 Java 8 日期和时间 API 中的 LocalDateTime、LocalDate 和 LocalTime 类来实现全面的格式验证。

代码:

<code class="java">public static boolean isValidFormat(String format, String value, Locale locale) {
    LocalDateTime ldt = null;
    DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format, locale);

    try {
        ldt = LocalDateTime.parse(value, formatter);
        String result = ldt.format(formatter);
        return result.equals(value);
    } catch (DateTimeParseException e) {
        try {
            LocalDate ld = LocalDate.parse(value, formatter);
            String result = ld.format(formatter);
            return result.equals(value);
        } catch (DateTimeParseException exp) {
            try {
                LocalTime lt = LocalTime.parse(value, formatter);
                String result = lt.format(formatter);
                return result.equals(value);
            } catch (DateTimeParseException e2) {
                // Handle exceptions for debugging purposes
            }
        }
    }

    return false;
}</code>
登录后复制

用法示例:

<code class="java">System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925", Locale.ENGLISH));
System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013", Locale.ENGLISH));
System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013  12:13:50", Locale.ENGLISH));
System.out.println("isValid - yyyy-MM-dd with 2017-18--15 = " + isValidFormat("yyyy-MM-dd", "2017-18--15", Locale.ENGLISH));</code>
登录后复制

输出:

isValid - dd/MM/yyyy with 20130925 = false
isValid - dd/MM/yyyy with 25/09/2013 = true
isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false
isValid - yyyy-MM-dd with 2017-18--15 = false
登录后复制

Pre-Java 8:

对于早期版本Java 版本,使用 SimpleDateFormat 来验证格式。

代码:

<code class="java">public static boolean isValidFormat(String format, String value) {
    Date date = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        date = sdf.parse(value);
        if (!value.equals(sdf.format(date))) {
            date = null;
        }
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return date != null;
}</code>
登录后复制

使用示例和输出:

<code class="java">System.out.println("isValid - dd/MM/yyyy with 20130925 = " + isValidFormat("dd/MM/yyyy", "20130925"));
System.out.println("isValid - dd/MM/yyyy with 25/09/2013 = " + isValidFormat("dd/MM/yyyy", "25/09/2013"));
System.out.println("isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = " + isValidFormat("dd/MM/yyyy", "25/09/2013  12:13:50"));</code>
登录后复制
isValid - dd/MM/yyyy with 20130925 = false
isValid - dd/MM/yyyy with 25/09/2013 = true
isValid - dd/MM/yyyy with 25/09/2013 12:13:50 = false
登录后复制

两种解决方案如果字符串与指定的格式匹配,则返回 true,否则返回 false,为验证日期格式提供可靠的方法Java。

以上是如何在 Java 中验证日期字符串格式而不解析为日期对象?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板