У меня есть массив допустимых форматов даты, которые я хочу обнаружить в некотором тексте, который вводит пользователь:
public static final DateFormat[] DATE_FORMATS = {
new SimpleDateFormat("M/d/yy"),
new SimpleDateFormat("M.d.yy"),
new SimpleDateFormat("M-d-yy"),
new SimpleDateFormat("M/d/yyyy"),
new SimpleDateFormat("M.d.yyyy"),
new SimpleDateFormat("M-d-yyyy"),
new SimpleDateFormat("M/dd/yy"),
new SimpleDateFormat("M.dd.yy"),
new SimpleDateFormat("M-dd-yy"),
new SimpleDateFormat("M/dd/yyyy"),
new SimpleDateFormat("M.dd.yyyy"),
new SimpleDateFormat("M-dd-yyyy"),
new SimpleDateFormat("MM/d/yy"),
new SimpleDateFormat("MM.d.yy"),
new SimpleDateFormat("MM-d-yy"),
new SimpleDateFormat("MM/d/yyyy"),
new SimpleDateFormat("MM.d.yyyy"),
new SimpleDateFormat("MM-d-yyyy"),
new SimpleDateFormat("MM/dd/yy"),
new SimpleDateFormat("MM.dd.yy"),
new SimpleDateFormat("MM-dd-yy"),
new SimpleDateFormat("MM/dd/yyyy"),
new SimpleDateFormat("MM.dd.yyyy"),
new SimpleDateFormat("MM-dd-yyyy"),
new SimpleDateFormat("yyyy/MM/dd"),
new SimpleDateFormat("yyyy.MM.dd"),
new SimpleDateFormat("yyyy-MM-dd")
};
Даты определяются с помощью кода ниже. this.searchTokens - это массив каждого поискового запроса из введенного пользователем текста.
List<Date> datesFound = new ArrayList<Date>();
for (String token : this.searchTokens) {
Date date;
for (DateFormat dateFormat : DateHelper.DATE_FORMATS) {
try {
// Attempt to parse this token as a date.
date = (Date) dateFormat.parse(token);
datesFound.add(date);
break;
} catch (ParseException e) {
continue;
}
}
}
Этот код проверяет и добавляет правильные даты в мой объект List для любой даты, кроме дат, отформатированных следующим образом:
- YYYY / ММ / дд
- YYYY.MM.DD
- YYYY-MM-дд
В одном из моих модульных тестов даты 2010/08/15 и 2011/08/15 соответствуют M / d / yy в первый раз в цикле и становятся объектами Date со значениями 8 июня 2182 и 8 июля 2182 соответственно. Почему первый SimpleDateFormat в DATE_FORMATS принимает такое совпадение? Количество цифр даже не совпадает ... Есть ли лучший способ определить эти даты?