加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

如何修改DateFormatSymbols月份值

发布时间:2020-05-24 23:50:50 所属栏目:Java 来源:互联网
导读:我正在尝试为特定区域设置添加特定月份名称. 我遇到的问题是挪威语bokmal(nb)的语言环境SimpleDateFormat返回的月份名称是英语而不是norweigan.但是,似乎locale(no)工作正常 例如此代码生成1月,2月等. String pattern = MMMM;DateFormat monthFormat = new Si

我正在尝试为特定区域设置添加特定月份名称.
我遇到的问题是挪威语bokmal(nb)的语言环境SimpleDateFormat返回的月份名称是英语而不是norweigan.但是,似乎locale(no)工作正常

例如此代码生成1月,2月等.

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.

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读