Если вы не знаете формат рисунка, вы можете использовать что-то вроде этого
DateTimeFormatter formatter1 = DateTimeFormat.forPattern("d/MM/YY")
.withLocale(Locale.UK);
DateTimeFormatter formatter2 = DateTimeFormat.forPattern("m:d:YYYY")
.withLocale(Locale.UK);
...
DateTimeFormatter formatterN = DateTimeFormat.forPattern(...
String stringDate = "08:18:2012";
LocalDate date;
try {
date = formatter1.parseLocalDate(stringDate);
} catch (Exception exp) {
try {
date = formatter2.parseLocalDate(stringDate);
} catch (Exception exp) {
...
date = formatterN.parseLocalDate(stringDate);
}
}
ИЛИ с использованием списка:
List<DateTimeFormatter> formatterList = new ArrayList<>();
formatterList.add(DateTimeFormat.forPattern("d/MM/YY")
.withLocale(Locale.UK));
formatterList.add(DateTimeFormat.forPattern("m:d:YYYY")
.withLocale(Locale.UK));
...
formatterList.add(DateTimeFormat.forPattern(...
String stringDate = "08:18:2012";
LocalDate date;
for(DateTimeFormatter formatter : formatterList) {
try {
return formatter.parseLocalDate(stringDate);
} catch (Exception exp) {
}
}
Но это невозможно, если у вас есть образец, как "D/MM/YY" и "ММ/д/YY", потому что вы можете узнать, какая строка «01/01/15 "означает (где день и месяц). Только если у вас много строк с одним шаблоном, вы можете статистически определить, что такое день и что такое месяц (месяц никогда не будет больше 12).
Что означает «и т. Д.»? Если вы можете принять «dd/MM/yyyy» и «MM/dd/yyyy» (оба из которых довольно распространены), то это игра - вы не можете надеяться, что «04/12/2015» - 4 декабря или 12 апреля. –
Если у вас много строк с одним шаблоном - игра еще не закончена, вы можете анализировать всю строку и находить там, где день и месяц. –