Jid*_*hem 7 java locale date-format internationalization chinese-locale
我需要从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实现它,它似乎是不可能的......
这个分析是否正确?如何以干净的方式实现这种格式化?
我认为 zh-CN 语言环境中不存在任何预定义的用于年和月格式的常量,因此您必须对其进行格式化。
\n\n new SimpleDateFormat("yyyy\xe5\xb9\xb4M\xe6\x9c\x88").format(date)\n
Run Code Online (Sandbox Code Playgroud)\n\n正如SimpleDateFormat
所说(我突出显示):
\n\n\n日期和时间格式由日期和时间模式字符串指定。在日期和时间模式字符串中,从 \'A\' 到 \'Z\' 以及从 \'a\' 到 \'z\' 的不带引号的字母被解释为表示日期或时间字符串的组成部分的模式字母。可以使用单引号 (\') 引用文本以避免解释。“\'\'”代表单引号。所有其他字符均不被解释;它们只是在格式化过程中复制到输出字符串中,或者在解析过程中与输入字符串进行匹配。
\n
因此,通过这种方式将中文字符放入格式字符串中是安全的。
\n\n由于Java是Unicode的,只要使用unicode源字符集进行编译,就可以内联源中的字符。否则,您应该从外部读取此字符串,例如从某些 Unicode 属性文件或数据库中读取。
\n