Kat*_*Kat 2 java android localization internationalization simpledateformat
我正在使用
DateFormat format = new SimpleDateFormat("MMM yyyy", locale);
String dateStr = format.format(date);
但是我在一些语言中找回了错误的翻译:它多年来一直缺少年份.我将在7月2014而不是7月2014年获得.
有没有办法获得年或任何推荐的解决方法?
你完全得到了你的要求.如果要在模式中使用年份引用,则需要添加它.因此,您的问题的解决方案可能很简单:
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上很慢.我自己没有测试过,所以我不能告诉你它是否真实,但它会正确地解决你的具体问题.