import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Locale;

public class Main {

    public static void main(String[] args) {
        List<String> unparsedDates = new ArrayList<String>();
        unparsedDates.add("6 July 1892");
        unparsedDates.add("9 May 1915");
        unparsedDates.add("February 335");
        unparsedDates.add("1768-02-12");
        unparsedDates.add("23 september 63 bc");
        unparsedDates.add("19 august ad 14");

        DateFormat df = new SimpleDateFormat("yyyy-MM-dd G", Locale.ENGLISH);
        for (String unparsedDate : unparsedDates) {
            try {
                Date parsedDate = DateParser.getParsedDate(unparsedDate);
                System.out.println(df.format(parsedDate));
            } catch (IllegalArgumentException ex) {
                System.err.println(ex.getMessage());
            }
        }
    }
}

class DateParser {

    private static final Locale locale = Locale.ENGLISH;
    private static final DateFormat[] dateFormats = {
        new SimpleDateFormat("dd MMMM yyyy G", locale),
        new SimpleDateFormat("dd MMMM G yyyy", locale),
        new SimpleDateFormat("yyyy-MM-dd", locale),
        new SimpleDateFormat("MMMM yyyy", locale),
        new SimpleDateFormat("dd MMMM yyyy", locale)};

    public static Date getParsedDate(String unparsedDate) {
        for (DateFormat dateFormat : dateFormats) {
            try {
                Date parsedDate = dateFormat.parse(unparsedDate);
                return parsedDate;
            } catch (ParseException ex) {
            }
        }
        throw new IllegalArgumentException("Cannot parse provided date: " + unparsedDate);
    }
}