为不同语言环境定制Java文本格式化程序

5
构建一个支持不同语言环境的Java应用程序,但希望自定义DateFormat显示方式,超出了FULLLONGMEDIUMSHORT DateFormat选项提供的范围。想做一些事情,比如在DateFormat.getDateTimeFormat()的日期和时间组件之间放置一个字符,将AM/PM转换为小写等(至少针对英语)。
可以考虑三种方法:
1)如果语言环境是英语,则在new SimpleDateFormat对象上使用自定义格式字符串。
2)修改现有语言环境的默认格式字符串。
3)创建指定所需格式字符串的新语言环境变体。
无法弄清如何执行第2或第3种方法(甚至是否可能),而且也不想执行第1种方法…… 有人遇到过类似的问题吗?
此外,似乎必须执行第2或第3种方法才能将AM/PM转换为小写?(为语言环境的日期格式设置指定AmPmMarkers资源)
5个回答

1

Java有一个专门的类,它就是ResourceBundle类。将其与属性文件Back配合使用,您就拥有了所需的一切以及更多。

即使没有ResourceBundle类,您也可以使用properties文件来保存所有SimpleDateFormat格式。

Settings formats = new Settings();
Properties SDFFormats = formats.load(propertiesFile);

String SDFAmerica = SDFFormats.getProperty("FormatAmerica");

虽然进入属性文件的条目可能会这样写

FormatAmerica = MMM-dd-yyyy

1

为什么不使用MessageFormat呢?

使用模式"{0,date,short} 在此输入您的文本 {0,time,short}" 来实现您想要的功能。


2
有时候应该是 "{0,time,short} 在这里输入你的文本 {0,date,short}",这取决于所在地区。 - Tim Sullivan

0
我处理过的唯一相似的事情是,“strftime”和“locale”指出意大利应该在时间字段之间使用冒号,但Java在它们之间放置句点。因此,我添加了以下代码:
  // This is an incredibly ugly hack, but it's based on the fact that
  // Java for some reason decided that Italy uses "." between
  // hours.minutes.seconds, even though "locale" and strftime say
  // something different.
      hmsTimeFormat = DateFormat.getTimeInstance(DateFormat.MEDIUM);
      if (hmsTimeFormat instanceof SimpleDateFormat)
      {
        String str = ((SimpleDateFormat)hmsTimeFormat).toPattern();
        str = str.replace('.', ':');
        hmsTimeFormat = new SimpleDateFormat(str);
      }

0
我们发现解决这个问题最令人满意的方法是从特定于区域设置的资源包中加载字符串“am”、“pm”和“formatString”,然后执行以下操作:
SimpleDateFormat sdf = (SimpleDateFormat)sdf.getDateTimeInstance(DateTime.SHORT,DateTime.SHORT, locale);
if (formatString != null) {
    sdf = new SimpleDateFormat(formatString);
}
if (am!= null && pm != null) {
    DateFormatSymbols symbols = sdf.getDateFormatSymbols();
    symbols.setAmPmStrings(new String[]{am, pm});
    sdf.setDateFormatSymbols(symbols);
}

保罗:不确定DateFormatSymbols中是否有分隔符...所以你可能需要继续使用str.replace。


0

我建议使用 Joda Time 进行日期格式化。它在格式化方面具有强大而优雅的灵活性。您可能会发现,它的格式化程序使您想要执行的操作非常简单。

顺便说一句:一旦你开始使用 Joda,你就再也回不去了!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接