Parsing a date with short month without dot

Jalil picture Jalil · Oct 28, 2009 · Viewed 33.3k times · Source

I have a String that represents a date in French locale : 09-oct-08 :

I need to parse that String so I came up with this SimpleDateFormat :

String format2 = "dd-MMM-yy";

But I have a problem with the month part, that seems to be expected with a ending dot :

df2.format(new Date());

gives me :

 28-oct.-09

What is now the best way for me to make SimpleDateFormat understand ("09-oct-08") ?

Full Code :

String format2 = "dd-MMM-yy"; 
DateFormat df2 = new SimpleDateFormat(format2,Locale.FRENCH); 
date = df2.parse("09-oct-08"); 

This gives me : java.text.ParseException: Unparseable date: "09-oct-08"

And if I then try to log :

df2.format(new Date()); 

I get : 28-oct.-09

Answer

Jack Leow picture Jack Leow · Oct 28, 2009

This seems to work:

    DateFormatSymbols dfsFr = new DateFormatSymbols(Locale.FRENCH);
    String[] oldMonths = dfsFr.getShortMonths();
    String[] newMonths = new String[oldMonths.length];
    for (int i = 0, len = oldMonths.length; i < len; ++ i) {
        String oldMonth = oldMonths[i];

        if (oldMonth.endsWith(".")) {
            newMonths[i] = oldMonth.substring(0, oldMonths[i].length() - 1);
        } else {
            newMonths[i] = oldMonth;
        }
    }
    dfsFr.setShortMonths(newMonths);
    DateFormat dfFr = new SimpleDateFormat(
        "dd-MMM-yy", dfsFr);

    // English date parser for creating some test data.
    DateFormat dfEn = new SimpleDateFormat(
        "dd-MMM-yy", Locale.ENGLISH);
    System.out.println(dfFr.format(dfEn.parse("10-Oct-09")));
    System.out.println(dfFr.format(dfEn.parse("10-May-09")));
    System.out.println(dfFr.format(dfEn.parse("10-Feb-09")));

Edit: Looks like St. Shadow beat me to it.