亚洲语言的年份日期格式

时间:2014-07-03 22:04:19

标签: java android localization internationalization simpledateformat

我正在使用

DateFormat format = new SimpleDateFormat("MMM yyyy", locale); String dateStr = format.format(date);

但是我在一些语言中找回了错误的翻译:它多年来一直缺少年份字符。我将在2014年7月而不是7月2014年获得。

有没有办法获得年份或任何推荐的解决方法?

2 个答案:

答案 0 :(得分:7)

你完全得到了你的要求。如果要在模式中使用年份引用,则需要添加它。因此,解决问题的方法可以简单:

DateFormat format = new SimpleDateFormat("M'月' yyyy'年'", locale);

但这里有两个问题。首先,日期格式:

DateFormat shrtDate = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
String pattern = ((SimpleDateFormat) shrtDate).toPattern();

这揭示了(在常规Java上,通常更可靠):

  

YYYY'年' M'月' d'日'

换句话说,您的代码应该更像:

DateFormat format = new SimpleDateFormat("yyyy'年'M'月'", locale);

但是,这需要将模式单独外化到每种语言(信不信由你,但格式不同),有效地加强了用户界面翻译的格式。这很糟糕。

如果您可以使用ICU,则可以解决您的问题。 ICU's DateFormat包含您要使用的模式,您可以为各种语言环境获取它:

DateFormat format = DateFormat.getPatternInstance(DateFormat.YEAR_MONTH, locale);

为了让您知道,有些人声称ICU在Android上。我自己还没有测试过,所以我无法告诉你它是否真实,但它会正确解决你的具体问题。

答案 1 :(得分:0)

你应该使用DateFormat和" MMMy"骨架,这将为您提供一个好用于格式化的模式。

这样的事情:

String pattern = DateFormat.getBestDateTimePattern(locale, "MMMy");
DateFormat format = new SimpleDateFormat(pattern, locale);
String dateStr = format.format(date);

在骷髅中,字段中的顺序或空格并不重要,它们只是告诉&#34;我想要一个年月格式,缩写的月份名称,适合该语言环境&#34; < / p>

最好将年份作为单一&#34; y&#34;,否则所有年份将零填充到4位数。 现在这不是问题,但如果Android支持备用日历可能会成为一个问题(例如日本帝国日历中的日期将显示为&#34;平成0015年1月&#34;,不好: - )

米哈伊