Question

I would like to be able to format java.util.Date objects in a "long" English, Spanish, and German date format. By "long" I mean the locale-dependent date format that corresponds to the LONG style pattern constant in java.text.DateFormat:

DateFormat.getDateInstance(DateFormat.LONG, myLocale).format(myDate);

With a standard JRE, I get date strings like:

November 22, 2010
22 de noviembre de 2010
22. November 2010

as expected. On Android 1.5, however, I get:

November 22, 2010
2010 11 22
2010 11 22

Is there a way that I can include just enough locale information with my app to be able to format dates correctly in long English, Spanish, and German formats using java.text.DateFormat?

Was it helpful?

Solution

First of all, the dates formatting in JRE is known for incorrect behavior for many locales (invalid Polish, Czech and Russian long dates, invalid Polish short date; And this are just examples of what I know for sure). So I wouldn't trust this source of information much.

If you want to implement your own long date formatting logic, here is what I would do:

String spanishDatePattern = "{0,number,00} {1} {2,number,####}";
String spanishLongDateMonthNameNovember = "de noviembre de";

Object[] arguments = { new Integer(date.getDate()),
                       spanishLongDateMonthNameNovember,
                       new Integer(date.getYear()) };
String formattedDate = MessageFormat.format(spanishDatePattern,
                arguments);

In this case you will need 13 messages per language (12 month ~names and 1 pattern). Not that much, I believe.

Of course this was just an example, in reality you would probably need to also add logic to resolve month names (having keys with name ending with month number, i.e. longDateFormatMonthName.0=January?).

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top