【问题标题】:How to include just enough locale data with an app to be able to format dates in three locales?如何在应用程序中包含足够的语言环境数据,以便能够在三个语言环境中格式化日期?
【发布时间】:2010-11-22 02:48:01
【问题描述】:

我希望能够将java.util.Date 对象格式化为“长”的英语、西班牙语和德语日期格式。 “long”是指与 LONG 样式模式常量对应的区域设置相关日期格式 java.text.DateFormat

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 正确格式化长英语、西班牙语和德语格式的日期?

【问题讨论】:

    标签: java android localization internationalization date-format


    【解决方案1】:

    首先,众所周知,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=January?)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-05-31
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2010-11-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多