`

日期字符串解析--SimpleDateFormat严格限制日期转换setLenient(false)

    博客分类:
  • java
 
阅读更多

输入“33/12/2011”,用SimpleDateFormat parse()方法,转化为Date(2012,01,02).这样处理相当“33/12/2011”是正常输入,如果需要"33/12/2011”报错,即把"33/12/2011"当作错误格式,刚开始自己写了段逻辑判断:

把转成的日期再反转回来,再比较是否一致,即使用format方法再转换成字符串,和传入的那个串作比较,如果不相等,则证明传入的那个日期格式是错误的

    private String getDestDateStrFromSrcDateStr(String dateStr,
            String srcDateFormat, String descDateFormat)
    {
        try
        {
            final SimpleDateFormat src_sdf = new SimpleDateFormat(srcDateFormat);
            final Date date = src_sdf.parse(dateStr);
            
            //把转成的日期再反转回来,再比较是否一致
            if (srcDateFormat.length() != dateStr.length()
                    || !dateStr.equals(src_sdf.format(date)))
            {
                LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal",
                        srcDateFormat,
                        dateStr);
                throw new ParseMessageException(
                        ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED);
            }
            
            //把转成的date类型转换为目标格式日期字符串(yyyyMMdd)
            final SimpleDateFormat dest_sdf = new SimpleDateFormat(
                    descDateFormat);
            LOGGER.info("the converted dest date str:{}"
                    + dest_sdf.format(date));
            return dest_sdf.format(date);
        }
        catch (java.text.ParseException e)
        {
            LOGGER.error("the src date format is {} , but input the date string value is {}, input illegal",
                    srcDateFormat,
                    dateStr);
            throw new ParseMessageException(
                    ErrorKeys.PAYMENT_AG_CONFIG_SERVICE_PARAM_VALIDATE_FAILED);
        }
    }

 总觉得这种方法显得很笨拙,后来找找API,发现有一个方法:setLenient(false)可以直接使用。哎~何必费这么大劲呢

测试方法:

import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;


public class DateTest {
	public static void main(String[] args) throws ParseException {
		DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
		format.setLenient(false);
		Date date = format.parse("33/12/2011");
		System.out.println(date);
	}
}

 

该方法的作用:

setLenient用于设置Calendar是否宽松解析字符串,如果为false,则严格解析;默认为true,宽松解析

分享到:
评论
1 楼 chinahuyong 2015-03-13  
学习了。

public static boolean isValidDate(String str) {
        if (str.indexOf("/") > 0) {
            str = str.replaceAll("/", "-");
        }
        boolean convertSuccess = true;
        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");

        try {
            format.setLenient(false);
            format.parse(str);
        } catch (ParseException e) {
            // e.printStackTrace();
            // 如果throw java.text.ParseException或者NullPointerException,就说明格式不对
            convertSuccess = false;
        }
        return convertSuccess;
    }

相关推荐

    JAVA日期与字符串的转换

    3. **性能考虑**:如果频繁进行日期和字符串之间的转换,可以考虑使用线程安全的`DateTimeFormatter`类(Java 8及以上版本提供)来替代`SimpleDateFormat`,以提高程序的性能。 4. **国际化支持**:如果应用程序需要...

    JAVA日期字符串与日期互相转换(非常实用)

    JAVA:日期字符串与日期互相转换 (日期类型转字符串,字符串转日期格式) SimpleDateFormat formatter= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    zk扩展工具--spring集成--字符串处理--日期处理

    例如,我们可以使用`SimpleDateFormat`来格式化和解析日期字符串,或者使用`LocalDateTime`、`ZonedDateTime`等类进行日期和时间的操作。例如: ```java SimpleDateFormat formatter = new SimpleDateFormat("yyyy-...

    字符串转日期

    2. **`java.text.ParseException`**: 当`SimpleDateFormat`无法正确解析日期字符串时抛出的异常。 3. **`java.util.Date`**: Java中的基本日期表示类,用于表示特定的瞬间,精确到毫秒。 #### 三、代码示例分析 ...

    Java字符串转换为日期和时间比较大小[归类].pdf

    在上面的代码中,我们首先使用 SimpleDateFormat 将日期字符串转换为日期对象,然后使用 getTime 方法比较日期对象的大小。如果 dt1 的时间大于 dt2 的时间,则返回 1;如果 dt1 的时间小于 dt2 的时间,则返回 -1;...

    检查日期格式字符串是否能转化成日期

    检查日期格式字符串是否能转化成日期,字符串可通过new SimpleDateFormat("xxxx");得到日期字符串

    日期工具类,包括各种日期之间的转换

    - **实现逻辑**: 使用 `SimpleDateFormat` 类来创建日期格式化对象,并通过该对象的 `parse()` 方法将日期字符串转换为日期对象。 ### 四、总结 综上所述,`DateUtil` 类提供了丰富的日期处理功能,包括但不限于...

    应用java实现日期型字符串和日期之间的相互转换(源代码)

    在Java中,我们可以使用SimpleDateFormat或DateTimeFormatter将日期型字符串转换为日期对象。例如: ```java import java.text.SimpleDateFormat; import java.util.Date; SimpleDateFormat formatter = new ...

    android 判断字符串是否是日期格式

    `SimpleDateFormat`是一个强大的日期/时间格式化类,它可以将日期和时间转换为字符串,反之亦然。以下是一个简单的示例: ```java public boolean isDateString(String input) { try { new SimpleDateFormat(...

    JAVA字符串转日期或日期转字符串.docx

    `java.text.SimpleDateFormat`是Java提供的一种强大的日期和时间格式化工具,它可以将日期对象转换为字符串,也可以将字符串解析为日期对象。下面我们将深入探讨如何使用`SimpleDateFormat`进行日期与字符串之间的...

    日期类 将短时间格式时间转换为字符串

    为了显示或打印日期,我们需要将其转换为人类可读的字符串形式,这就需要用到 `SimpleDateFormat` 类。`SimpleDateFormat` 是一个具体的类,实现了 `DateFormat` 接口,可以用来解析、格式化和打印日期/时间。 在...

    Java字符串 日期 数字格式化输出-.doc

    Java 字符串日期数字格式化输出 Java 中的字符串日期数字格式化输出是一种常见的操作,特别是在数据输出和显示时。 Java 提供了多种方式来实现格式化输出,包括使用 NumberFormat、DecimalFormat 和 ...

    Java日期时间字符串和毫秒相互转换的方法

    在上面的代码中,我们首先定义了一个日期时间字符串,然后使用SimpleDateFormat类将其解析成Date对象,最后使用Calendar类将Date对象转换成毫秒。 毫秒转换成日期时间字符串 在Java中,可以使用Date和...

    日期转换----望有所帮助

    本文将深入探讨如何在Java中进行日期转换,包括如何将日期对象转换为特定格式的字符串以及如何将字符串解析回日期对象,并提供一些实用的例子。 #### 一、Java中的日期类 在Java中,日期相关的类主要分为以下几种...

    java.util.Date与java.sql.Date互转及字符串转换为日期时间格式.docx

    ### Java.util.Date与Java.sql.Date互转及字符串转换为日期时间格式 #### 一、Java.util.Date与Java.sql.Date的基本概念 在Java编程语言中,处理日期和时间时经常使用到`java.util.Date`和`java.sql.Date`这两个类...

    Java字符串类型转换

    3. **从布尔值到字符串**:`String.valueOf(Boolean b)` 可以将布尔值转换为字符串,其中`true`转换为`"true"`,`false`转换为`"false"`。 #### 二、字符串到其他类型的转换 1. **从字符串到整型**:`Integer....

    Springboot DTO字符字段与日期字段的转换问题.docx

    当前端提交包含日期字符串的JSON时,如`"birthday":"1983-03-18"`,Spring Boot默认会将这个字符串解析为时间戳,而不是转换为Date对象。因此,在响应到前端时,`birthday`字段显示为时间戳,而不是日期字符串。 ...

    字符串122000.txt

    日期与字符串相互转换 - **日期转字符串**: ```java Date d = new Date(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String str = sdf.format(d); System.out.println(str); `...

    java日期格式的转换

    该方法使用 `SimpleDateFormat` 对象将日期对象转换为字符串,日期格式为 `yyyy-MM-dd HH:mm:ss`。 日期格式的种类 在 Java 中,我们可以使用多种日期格式来表示日期对象。常见的日期格式包括: * `yyyy.MM.dd G ...

Global site tag (gtag.js) - Google Analytics