你知道怎样利用 SimpleDateFormat 验证日期格式

本文将介绍怎样利用 SimpleDateFormat 验证日期格式,日期格式是否符合预期格式。

在 Java 中,您可以使用 SimpleDateFormat 类来验证日期字符串是否符合特定的格式。以下是一个简单例子:

import java.text.SimpleDateFormat;

public class Demo {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("case1: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:17")));
        System.out.println("case2: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:1700")));
        System.out.println("case3: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:17hello")));
        System.out.println("case4: " + dateFormat.format(dateFormat.parse("2024-01-22 13:142:17")));
        System.out.println("case5: " + dateFormat.format(dateFormat.parse("2024-1-22 13:42:17")));
    }

}

运行示例,输出如下:

case1: 2024-01-22 13:42:17
case2: 2024-01-22 14:10:20
case3: 2024-01-22 13:42:17
case4: 2024-01-22 15:22:17
case5: 2024-01-22 13:42:17

根据输出可知,即使我们的日期格式存在问题,SimpleDateFormat 默认情况下也会很好的宽松解析,显然这对我们验证日期格式是不允许的。

此时,我们可以通过将 setLenient() 方法将验证设置为严格模式,方法定义如下:

public void setLenient(boolean lenient)

指定日期/时间解析是否宽松。通过宽泛的解析,解析器可以使用启发式来解释不精确匹配该对象格式的输入。通过严格的解析,输入必须与此对象的格式相匹配。

此方法等同于以下调用。

      getCalendar().setLenient(lenient)

参数:

lenient - 当为 true ,解析是宽松的;当为 false,解析是严格的;

以下示例将 SimpleDateFormat 解析设置为严格模式:

import java.text.SimpleDateFormat;

public class Demo {

    public static void main(String[] args) throws Exception {
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        // 设置为严格模式,不允许解析不严格的日期
        dateFormat.setLenient(false);
        
        System.out.println("case1: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:17")));
        System.out.println("case2: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:1700")));
        System.out.println("case3: " + dateFormat.format(dateFormat.parse("2024-01-22 13:42:17hello")));
        System.out.println("case4: " + dateFormat.format(dateFormat.parse("2024-01-22 13:142:17")));
        System.out.println("case5: " + dateFormat.format(dateFormat.parse("2024-1-22 13:42:17")));
    }

}

运行示例,输出如下:

case1: 2024-01-22 13:42:17
Exception in thread "main" java.text.ParseException: Unparseable date: "2024-01-22 13:42:1700"
	at java.text.DateFormat.parse(DateFormat.java:366)
	at com.hxstrive.Demo.main(Demo.java:13)

上面输出可知,只有日期字符串和日期格式完全匹配才会解析,否则抛出 java.text.ParseException 异常。

在年轻人的颈项上,没有什么东西能比事业心这颗灿烂的宝珠更迷人的了。 —— 哈菲兹
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号