我正在尝试为特定区域设置添加特定月份名称.
我遇到的问题是挪威语bokmal(nb)的语言环境SimpleDateFormat返回的月份名称是英语而不是norweigan.但是,似乎locale(no)工作正常
我遇到的问题是挪威语bokmal(nb)的语言环境SimpleDateFormat返回的月份名称是英语而不是norweigan.但是,似乎locale(no)工作正常
String pattern = "MMMM"; DateFormat monthFormat = new SimpleDateFormat(pattern,new Locale("nb")); Calendar cal = Calendar.getInstance(); for (int i = 0; i < 12; i++) { cal.set(Calendar.MONTH,i); System.out.println(monthFormat.format(cal.getTime())); }
vs此代码导致Januar,Februar等
String pattern = "MMMM"; DateFormat monthFormat = new SimpleDateFormat(pattern,new Locale("no")); Calendar cal = Calendar.getInstance(); for (int i = 0; i < 12; i++) { cal.set(Calendar.MONTH,i); System.out.println(monthFormat.format(cal.getTime())); }
我知道我可以使用特定的DateFormatSymbols配置SimpleDateFormat但是这无助于保持我的代码对于任何未来的本地人都是通用的.我想知道是否有人知道如何修改受支持的java语言环境的默认月份值?我想我会添加一个资源文件,但无法弄清楚如何.
解决方法
查看
source code for SimpleDateFormat中使用的构造函数:
public SimpleDateFormat(String pattern,Locale locale) { super(); calendar = new GregorianCalendar(locale); ... formatData = new DateFormatSymbols(locale); ... numberFormat = NumberFormat.getInstance(locale); ... }
使用的语言环境的第一个和最后一个实例(GregorianCalendar)和(NumberFormat)看起来并不乐观,但中间实例(DateFormatSymbols)确实如此.看看它的source code,我们在构造函数的第一行看到一个ResourceBundle:
public DateFormatSymbols (Locale locale) throws MissingResourceException { ResourceBundle res = ResourceBundle.getBundle("gnu.java.locale.LocaleInformation",locale,ClassLoader.getSystemClassLoader()); // This line! ampms = getStringArray(res,"ampms"); eras = getStringArray(res,"eras"); localPatternChars = res.getString("localPatternChars"); months = getStringArray(res,"months"); shortMonths = getStringArray(res,"shortMonths"); shortWeekdays = getStringArray(res,"shortWeekdays"); weekdays = getStringArray(res,"weekdays"); runtimeZoneStrings = getZoneStrings(res,locale); dateFormats = formatsForKey(res,"DateFormat"); timeFormats = formatsForKey(res,"TimeFormat"); }
这是您必须编辑的资源包.有很多工具可以做到:
> Eclipse ResourceBundle Editor(或github)
> Zaval Java Resource Editor
一旦编辑并保存了ResourceBundle,就必须扩展这两个类 – 扩展的DateFormatSymbols需要使用新的ResourceBundle,扩展的SimpleDateFormat需要使用新的扩展类.
如果您需要更多资源,请考虑查看this oracle article.