你可以使用這樣的事情:
Pattern pattern = Pattern.compile("\\b(\\d+)([-./])\\d{1,2}\\2(\\d{2}(?:\\d{2})?)");
String date = "21/12/2014";
Matcher matcher = pattern.matcher(date);
matcher.find();
boolean dayFirst = matcher.group(1).length() == 2;
boolean fourCharYear = true;
String separator = matcher.group(2);
String dateFormat = "1sepMMsep2".replace("sep", separator);
if(dayFirst) {
dateFormat = dateFormat.replace("1", "dd").replace("2", "y");
fourCharYear = matcher.group(3).length() == 4;
} else {
dateFormat = dateFormat.replace("2", "dd").replace("1", "y");
}
if(fourCharYear) {
dateFormat = dateFormat.replace("y", "yyyy");
} else {
dateFormat = dateFormat.replace("y", "yy");
}
SimpleDateFormat format = new SimpleDateFormat(dateFormat);
Date parse = format.parse(date);
它是基於以下假設:
- 第一個數字組無論是白天或一年,這一年將永遠是4個字符如果它第一。
- 分隔永遠是要麼
-
,.
或/
- 月份的總是會來第二
- 的一年,在年底的時候,永遠是四位或兩位數字。
在這裏,你是在殺死你的思維能力,我想。你可以想出你自己的解決方案,它真的會幫助你。你將要購買某人的想法。 – 2015-03-03 12:58:29
那麼.. 02/04/11的格式是什麼?它可以是所有的排列......你需要一些邊界約束。 – Yuri 2015-03-03 13:01:07
如果您有從源頭獲取信息的可能性,它們以什麼格式創建,這是啓動的最佳方式。想想所有的邊緣案例爲「01-02-03」 - > 01.Feb.2003,02.Jan.2003,03.Feb.2001,... – SubOptimal 2015-03-03 13:01:35