显示日期范围的 I18N 友好方式是什么?



>我显示日期范围如下:

public static void main(String[] args) {
    Locale.setDefault(new Locale("nl", "NL"));
    DateTime d1 = new DateTime();
    DateTime d2 = new DateTime().plusDays(30);
    final String s1 = d1.toString(DateTimeFormat.shortDate());
    final String s2 = d2.toString(DateTimeFormat.shortDate());
    System.out.println(s1 + "-" + s2); // shows  "4/05/12-3/06/12" for en_AU
    System.out.println(s1 + "-" + s2); // shows  "4-5-12-3-6-12" for nl_NL
}

对于荷兰的用户,他们看到的是"4-5-12-3-6-12"。这是令人困惑的。

显示考虑

用户区域设置的日期范围的方法是什么?

在本地化应用程序中,这种分离将由翻译人员在翻译资源包时决定:

#foo.properties
#comment: a date range
dateRange={0,date}-{1,date}

可能变成:

#foo_en.properties
dateRange={0,date} to {1,date}

然后可以使用 MessageFormat 类型处理此问题。形式的东西:

//untested code
MessageFormat mf = new MessageFormat(formatString, locale);
//java.util.Date instances
Object[] range = {date1, date2};
String result = mf.format(range);

即使您不提供完整的翻译,此方法也可能适用于某些本地化。

也许使用省略号 (...) 而不是破折号?

至少在值周围使用更多空间:

"4-5-12 - 3-6-12"

afaik,年份的 4 位数字在每个地区都是可以理解的:

"4-5-2012 - 3-6-2012"

固定数量的数字可能是您的口味,也可能不是您的口味:

"04-05-2012 - 03-06-2012"

从 2 到 3 种形式我没有看到太大的改进,但到 2 种形式,有。我们经常接触较小的数字而不是较大的数字,而且较小的数字很少。11、12和13经常交叉,但如果你看到2011年,2012年和2013年,它主要是几年来,主要是日期。

您可以使用:

SimpleDateFormat sdf;
// Create new SimpleDateFormat object that returns default pattern.
sdf = new SimpleDateFormat();
String dateFormat = sdf.format(date);
System.out.println("Date by SimpleDateFormat class : " + dateFormat);

输出为:

日期按简单日期格式类 : 6/14/08 1:15 PM

最新更新