我需要从Java日期中仅提取月份和年份信息以显示在GUI中.必须使用用户区域设置翻译此日期.我知道两种格式化本地化日期的方法:
DateFormat.getInstance(DateFormat.LONG, locale).format(date)
new SimpleDateFormat("yyyy M", locale).format(date)
对于区域设置SIMPLIFIED_CHINESE
和日期2013-02-18
,这给出:
我们需要使用LONG
没有日期的格式(2013年2月).[变体2显然是不可接受的,因为年月的排序不受区域设置的影响].问题可能是:如何从长格式中删除日期部分(18日)?我尝试使用该方法format(Date date, StringBuffer toAppendTo, FieldPosition pos)
,但这只允许提取数字部分,而不是额外的字符.
模式DateFormat.getInstance(DateFormat.LONG, Locale.SIMPLIFIED_CHINESE)
是yyyy'?'M'?'d'?'
.提取日期部分会产生yyyy'?'M'?'
.在我看来,不可能使用Java的DateFormat标准来实现这一点,因为额外的字符(?
,?
和?
)似乎没有映射到相应的字段,而只是格式化器没有其他语义的字符.
我一看DateFormatSymbols
和LocaleServiceProvider
,但认为这并不能帮助.对我来说,扩展点将是为getInstance(int style)
方法添加另一种日期样式.但是如果没有为所有Locale实现它,它似乎是不可能的......
这个分析是否正确?如何以干净的方式实现这种格式化?