2012-10-24 81 views
2

我想验证一个实际上是一个字符串的日期,试图以yyyy/MM/dd格式打印它。 下面是代码。使用dateformat验证日期

String s="2012/12/0390990"; 
SimpleDateFormat ft = new SimpleDateFormat("yyyy/MM/dd"); 
System.out.println(ft.format(ft.parse(s))); 

并且输出是3083/05/30。我也想要验证。不知道如何继续。

回答

5

默认情况下为宽松。在解析之前,您需要设置它non-lenient

ft.setLenient(false); 

这将导致ParseException当一个无效的日期和/或月份进行比较,以年为供应。请注意,这不会验证年份本身,因为基本上任何年份都是有效的。根据具体的功能要求,您可能需要在一年中进行额外的检查,例如,在/然后分割字符串检查,如果第1部分的长度为4

+0

但为什么宽松的解析会导致一个似乎与输入不同的日期... –

+2

@Miserable:390990天约为1071年。它的字面意思是被解释成月份/年份,以适应月份的持续时间。你最终进一步大约1071年。 – BalusC