我正在使用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
答案 0 :(得分:1)
继续前进并使用现代Java日期和时间API java.time
。 DateTimeFormatter.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"