gpt4 book ai didi

java - 如何修改 DateFormatSymbols 月份值

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:43 26 4
gpt4 key购买 nike

我正在尝试为特定语言环境添加特定的月份名称。我遇到的问题是挪威博克马尔 (nb) 的语言环境,SimpleDateFormat 返回的月份名称是英文的,而不是 norweigan。然而,语言环境(否)似乎工作正常

例如此代码在一月、二月等产生结果。

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()));
}

与此代码相比,结果为 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,但这无助于让我的代码对任何 future 的本地人来说都是通用的。我想知道是否有人知道如何修改受支持的 Java 语言环境的默认月份值?我认为我可以添加一个资源文件,但不知道如何添加。

最佳答案

查看 source code 中使用的构造函数对于 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");
}

这是您必须编辑的资源包。有很多工具可以做到这一点:

一旦您编辑并保存了您的 ResourceBundle,您将必须扩展这两个类 - 您的扩展 DateFormatSymbols 将需要使用您的新 ResourceBundle,而您的扩展 SimpleDateFormat 将需要使用该新的扩展类。

如果您需要更多资源,请考虑查看 this oracle article .

关于java - 如何修改 DateFormatSymbols 月份值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com