我正在使用
DateFormat format = new SimpleDateFormat("MMM yyyy", locale);
String dateStr = format.format(date);
但是我在一些语言中找回了错误的翻译:它多年来一直缺少年份字符。我将在2014年7月而不是7月2014年获得。
有没有办法获得年份或任何推荐的解决方法?
答案 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;,不好: - )
米哈伊