如何在java中检查不同的日期格式

时间:2013-12-23 05:56:51

标签: java

我在dd-MM-yyyy,dd/MM/yyyyyyyy-MM-ddyyyy/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

3 个答案:

答案 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