亚洲语言的年份日期格式

Kat*_*Kat 2 java android localization internationalization simpledateformat

我正在使用

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

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

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

Paw*_*yda 7

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

DateFormat format = new SimpleDateFormat("M'?' yyyy'?'", locale);
Run Code Online (Sandbox Code Playgroud)

不过,这里有两个问题.一,日期格式:

DateFormat shrtDate = DateFormat.getDateInstance(DateFormat.LONG, Locale.CHINA);
String pattern = ((SimpleDateFormat) shrtDate).toPattern();
Run Code Online (Sandbox Code Playgroud)

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

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

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

DateFormat format = new SimpleDateFormat("yyyy'?'M'?'", locale);
Run Code Online (Sandbox Code Playgroud)

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

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

DateFormat format = DateFormat.getPatternInstance(DateFormat.YEAR_MONTH, locale);
Run Code Online (Sandbox Code Playgroud)

只是为了让你知道,有些人声称ICU 在Android上很.我自己没有测试过,所以我不能告诉你它是否真实,但它会正确地解决你的具体问题.