如何在SimpleDateFormat中禁用零填充宽松

时间:2018-02-05 15:49:21

标签: java date simpledateformat date-parsing

我正在使用SimpleDateFormat模式"MM",并尝试解析"0012"

即使禁用了宽大处理,格式化程序也会成功解析到12月。我希望它抛出异常,这不是2位数的月份。有谁知道如何实现这一目标?

代码

示例代码:

SimpleDateFormat df = new SimpleDateFormat( "MM");
df.setLenient( false);
System.out.println( df.parse( "0012"));

输出:

  

Tue Dec 01 00:00:00 CET 1970

3 个答案:

答案 0 :(得分:1)

继续前进并使用现代Java日期和时间API java.timeDateTimeFormatter.ofPattern("uuuu-MM-dd")会将00解析为月份然后反对,因为它后面没有连字符-(即,甚至在检查00之前是否有效月份之前)数)。

我认为你应该想要使用java.time。你正在使用的SimpleDateFormat课程不仅过时,而且也是出了名的麻烦。

链接: Oracle Tutorial: Date Time解释如何使用java.time

答案 1 :(得分:0)

这可能不是解决这个问题的最佳解决方案,但在这里。我建议检查用户引入的值是否大于2位数(我认为输入是一个字符串)在异常处理程序内部,如果出现则创建异常:

try{

    if(str.length() > 2){

        int crash = (1/0);

    }

}catch (ArithmeticException e){

    System.out.println("You've introduced a month format larger than MM");

    //introduce the code you'll like to be executed when the Exception is 
    //fired.

}

我知道这不是解决此问题的最佳方法。但是,它的工作原理。如果有人有更好的想法告诉我,我会编辑我的答案。

答案 2 :(得分:-1)

假设0012是月份和年份,每个都有2位数字,您可以使用MMyy作为模式:

SimpleDateFormat df = new SimpleDateFormat("MMyy");
df.setLenient(false);
System.out.println(df.parse("0012"));

这会引发以下异常,

java.text.ParseException: Unparseable date: "0012"