我在dd-MM-yyyy,dd/MM/yyyy
,yyyy-MM-dd
,yyyy/MM/dd
SimpleDateFormat sm1 = new SimpleDateFormat("dd-MM-yyyy");
String date = "01-12-2013";
System.out.println("Date 1 is "+sm1.parse(date));
date = "2013-12-01";
System.out.println("Date 1 is "+sm1.parse(date));
相同的简单日期格式给出了以下结果,尽管日期格式错误(即:-2013-12-01)。显示结果。
Date 1 is Sun Dec 01 00:00:00 IST 2013
Date 1 is Sun Jun 05 00:00:00 IST 7
答案 0 :(得分:5)
您需要setLenient(false)
使parse()
方法throw
ParseException
用于不可解决的案例
答案 1 :(得分:1)
我尝试过Jigar Joshi的回答。 ==========================代码======================= ================
SimpleDateFormat sm1 = new SimpleDateFormat("dd-MM-yyyy");
sm1.setLenient(false);
String date = "01-12-2013";
System.out.println("Date 1 is "+sm1.parse(date));
date = "2013-12-01";
System.out.println("Date 1 is "+sm1.parse(date));
=========================结果===================== ===================
Date 1 is Sun Dec 01 00:00:00 CST 2013
Exception in thread "main" java.text.ParseException: Unparseable date: "2013-12-01"
at java.text.DateFormat.parse(DateFormat.java:337)
at workflow.Test.main(Test.java:14)
答案 2 :(得分:0)
您的日期格式为dd-MM-yyyy
。这意味着解析器需要一些日,月和年格式。
从the SimpleDateFormat
documentation: Number
类型格式化程序中的模式字母数量是最小值。因此,虽然2013
在我们的脑海中没有意义,但它符合格式化程序的界限。
您已提供2013-12-01
以符合该格式。格式化程序正在做的是提供12月1日(此处插入时区),然后再添加2,013天。
原来是June 6, 7 AD。您的时区有一些摆动空间(我不确定IST代表的五个时区中的哪一个is actually yours)。
所以,不管你信不信......格式化器是正确的。 非常小心您在日期中指定或允许的格式!
如果您不想解析,请在setLenient(false)
的实例上指定sm1
。