a) First of all, never use the expression new Locale("el-GR") , instead use new Locale("el", "GR") or without the country new Locale("el") , see javadoc for proper use constructors (because there is no language code "el-GR").
b) The exception you are observing (and me too, but not all) is caused by various localization resources of the underlying JVM. Proof on my JVM (1.6.0_31):
Locale locale = new Locale("el"); DateFormatSymbols dfs = DateFormatSymbols.getInstance(locale); for (String m : dfs.getMonths()) { System.out.println(m); }
An explanation of the various data can be found in the CLDR repository for localized resources. Modern Greek knows at least two different forms of the month of March (Μαρτίου versus the autonomous form Μάρτιος). Java version 6 uses a standalone form, while Java version 7 uses a regular form.
See also the compatibility note for java version 8, where you have options for specifying the format mode (standalone or not):
When formatting date and time values using DateFormat and SimpleDateFormat, contextual monthly names are supported for languages that have formatting and stand-alone forms of the month names. For example, the preferred month name for January in Czech is in the form of formatting, while the stand-alone form. The getMonthNames and getShortMonthNames methods DateFormatSymbols returns the names of the months in a formatting form for those languages. Note that the month names returned by DateFormatSymbols were offline before Java SE 7 . You can specify formatting and / or stand-alone forms using Calendar.getDisplayName and Calendar.getDisplayNames methods ...
Thus, the obvious solution will be upgraded to Java 7 . External libraries will not help here, because today there is no one who has their own resources for the Greek language. However, if for some reason you are forced to continue working with Java 6, then an inconvenient workaround will help:
Locale locale = new Locale("el", "GR"); SimpleDateFormat formatter = new SimpleDateFormat("dd MMMM yyyy, HH:mm", locale); DateFormatSymbols dfs = DateFormatSymbols.getInstance(locale); String[] months = {"Ιανουαρίου", "Φεβρουαρίου", "Μαρτίου", "Απριλίου", "Μαΐου", "Ιουνίου", "Ιουλίου", "Αυγούστου", "Σεπτεμβρίου", "Οκτωβρίου", "Νοεμβρίου", "Δεκεμβρίου"}; dfs.setMonths(months); formatter.setDateFormatSymbols(dfs); try { System.out.println(formatter.parse("28 Μαρτίου 2014, 14:00")); // output in my timezone: Fri Mar 28 14:00:00 CET 2014 } catch (ParseException ex) { ex.printStackTrace(); }