如何在应用程序中包含足够的语言环境数据,以便能够在三个语言环境中格式化日期?

时间:2010-11-22 02:48:02

标签: java android localization internationalization date-format

我希望能够以“长”英语,西班牙语和德语日期格式格式化java.util.Date个对象。 “long”是指与java.text.DateFormat中的LONG样式模式常量对应的与语言环境相关的日期格式:

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

使用标准JRE,我得到日期字符串,如:

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

正如所料。但是,在Android 1.5上,我得到了:

November 22, 2010
2010 11 22
2010 11 22

有没有办法可以在我的应用中包含足够的区域设置信息,以便能够使用java.text.DateFormat以长英语,西班牙语和德语格式正确格式化日期?

1 个答案:

答案 0 :(得分:0)

首先,JRE中的日期格式因许多语言环境的错误行为而闻名(无效的波兰语,捷克语和俄语长日期,无效的波兰短日期;这只是我所知道的例子)。所以我不太相信这些信息来源。

如果你想实现自己的长日期格式化逻辑,我会这样做:

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);

在这种情况下,每种语言需要13条消息(12个月〜名称和1种模式)。不是那么多,我相信。

当然这只是一个例子,实际上您可能还需要添加逻辑来解析月份名称(名称以月号结尾的键,即longDateFormatMonthName.0 = 1月?)。