2013-04-17 29 views
2

我有一个日期和它应该在字符串中的模式。检查日期和它的模式与预期模式

//True 
String date ="2012-10-12 12:01:10.10.150"; 
String pattern = "yyyy-MM-dd hh:mm:ss.SSS"; 

//False 
String date ="2012-10-12 12:01:10.150"; 
String pattern = "yyyy-MM-dd hh:mm:ss"; 

现在,我想知道日期变量是否有适当的日期满足给定的字符串模式。在上面的例子中,我显示True/False是预期的结果。

我已经尝试过SimpleDateFormat(如果它抛出ParseException),但它不会用于第二个例子。

public boolean isValidDate(String date, String pattern) { 
    if (date == null) 
     return false; 
    SimpleDateFormat dateFormat = new SimpleDateFormat(pattern); 
    try { 
     dateFormat.parse(date.trim()); 
    } catch (ParseException pe) { 
     return false; 
    } 
    return true; 
} 
+0

使用正则表达式来测试预期的模式 –

+0

你怎么使用'SimpleDateFormt'? – 2013-04-17 09:33:47

+0

SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);然后我解析它。 –

回答

3

我认为你需要同时使用正则表达式和SimpleDateFormat的达到你想要什么

boolean validate(String date, String pattern) throws ParseException { 
    String regex = pattern.replaceAll("\\w", "\\\\d").replace(".", "\\."); 
    if (!date.matches(regex)) { 
     return false; 
    } 
    SimpleDateFormat sdf = new SimpleDateFormat(pattern); 
    sdf.setLenient(false); 
    try { 
     sdf.parse(date); 
    } catch (Exception e) { 
     return false; 
    } 
    return true; 
} 
+0

谢谢你的答复。是的,我认为是这样。但在这种情况下,我的日期和模式是动态的。这些来自一些财产文件。所以如何处理这个要求。 –

+0

好的。查看我的更新。 –

+0

是的...这就是我要找的...但是你能否告诉你为什么最后使用.replace(“。”,“\\。”)? –

1

使用yyyy-MM-dd hh:mm:ss作为第二日期的模式。

String date = "2012-10-12 12:01:10"; 
String pattern = "yyyy-MM-dd hh:mm:ss"; 
SimpleDateFormat sdf = new SimpleDateFormat(pattern); 
Date parse = sdf.parse(date); 

首都S代表你的第二个字符串没有的毫秒数。 See the API

+0

这不是我想要使用哪种模式。我想检查给定模式是否满足给定日期的字符串格式。 –

+0

这是相反的方式。检查输入是否满足模式。 – 2013-04-17 09:39:02

+0

这就是我的问题是..如何检查它? –

1

SimpleDateFormat.parse() Java文档:

...解析不一定使用所有字符,直到达到 字符串的结尾......

这意味着,如果你的日期是更长该模式仍然会产生有效的Date实例。反过来(例如你的第二个例子)模式是更长(更详细)给定的日期字符串,因此它不会产生Date。使用这个,而不是你的第二个例子:

String pattern = "yyyy-MM-dd hh:mm:ss"; 
+0

感谢您的答复。我的事情你们人们感到困惑。我编辑了我的问题。我想要的方法在第二个例子中是不正确的。 –