This is very difficult. For example different locales sort month and day differently. If you have a 'pure number' date, as "20.10.2016" for example, you don't for sure in what order month and date are (you can usually identify the year, as that is commonly 4 digits, but it can be 2-digits as well).
So there are cases, where a date's locale cannot be uniquely identified.
If you have edge information, as for example, there is a specific set of locales that could match, or that, given a certain likelyhood for what locate it is, you could try to interpret them. However, you'd not be able to be absolutely certain you got the right interpretation.
My suggestion is to write regular expressions to identify the date format and then use SimpleDateFormat to parse the dates. Then use the 'chain of responsibility' pattern to try through all regular expressions, and if you got a match, you can use that particular SimpleDateFormat.