Capisco, comunque per "provare" con più formati basta farsi una classettina es. MultiDateFormat come questa che ho scritto e provato al volo poco fa.
import java.text.DateFormat;
import java.text.ParseException;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import java.util.Locale;
public class ProvaDateMultiFormato {
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf1 = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALIAN);
sdf1.setLenient(false);
SimpleDateFormat sdf2 = new SimpleDateFormat("dd MMMM yyyy", Locale.ITALIAN);
sdf2.setLenient(false);
MultiDateFormat mdf = new MultiDateFormat(sdf1, sdf2);
System.out.println(mdf.parse("24/7/2018"));
System.out.println(mdf.parse("24 luglio 2018"));
}
}
class MultiDateFormat {
private List<DateFormat> dateFormats;
public MultiDateFormat(DateFormat... dfs) {
dateFormats = Arrays.asList(dfs);
}
public Date parse(String str) throws ParseException {
for (DateFormat df : dateFormats) {
ParsePosition pp = new ParsePosition(0);
Date d = df.parse(str, pp);
if (d != null && pp.getIndex() == str.length()) {
return d;
}
}
throw new ParseException("No date format suitable to parse the string: " + str, 0);
}
}
Nota che ho gestito il parsing in modo molto (molto!) "stretto". I due SimpleDateFormat li ho impostati come NON "lenient" e il test sul index del ParsePosition permette di scartare date giuste ma ad esempio con spazi dietro es. "24 luglio 2018 " (nota lo spazio dopo 2018, sì è pignolo così).
Ovviamente puoi "allentare" un po' il parsing e renderlo più permissivo.