Java 如何修改DateFormatSymbols月值
我正在尝试为特定地区添加特定的月份名称。 我遇到的问题是挪威bokmal(nb)的语言环境。SimpleDataFormat返回的月份名称是英文的,而不是norweigan。然而,似乎locale(no)工作正常 e、 g.该代码在1月、2月等产生Java 如何修改DateFormatSymbols月值,java,Java,我正在尝试为特定地区添加特定的月份名称。 我遇到的问题是挪威bokmal(nb)的语言环境。SimpleDataFormat返回的月份名称是英文的,而不是norweigan。然而,似乎locale(no)工作正常 e、 g.该代码在1月、2月等产生 String pattern = "MMMM"; DateFormat monthFormat = new SimpleDateFormat(pattern, new Locale("nb")); Calendar cal = Calendar.ge
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()));
}
String pattern=“MMMM”;
DateFormat monthFormat=新的SimpleDateFormat(模式,新语言环境(“nb”));
Calendar cal=Calendar.getInstance();
对于(int i=0;i<12;i++){
校准设置(日历月,i);
System.out.println(monthFormat.format(cal.getTime());
}
vs此代码将导致1月、2月等
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()));
}
String pattern=“MMMM”;
DateFormat monthFormat=新的SimpleDateFormat(模式,新语言环境(“否”));
Calendar cal=Calendar.getInstance();
对于(int i=0;i<12;i++){
校准设置(日历月,i);
System.out.println(monthFormat.format(cal.getTime());
}
我知道我可以使用特定的DateFormatSymbols配置SimpleDataFormat,但这无助于使我的代码对未来的本地代码保持通用性。我想知道是否有人知道如何修改受支持java语言环境的默认月份值?我想我可以添加一个资源文件,但不知道如何添加。查看for
SimpleDateFormat
中使用的构造函数:
public SimpleDateFormat(String pattern, Locale locale) {
super();
calendar = new GregorianCalendar(locale);
...
formatData = new DateFormatSymbols(locale);
...
numberFormat = NumberFormat.getInstance(locale);
...
}
第一个和最后一个使用的locale实例(gregorianalendar
)和(NumberFormat
)看起来不太有希望,但中间的一个(DateFormatSymbols
)看起来很有希望。查看its,我们在构造函数的第一行中看到一个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");
}
这是您必须编辑的资源包。有很多工具可以做到这一点:
- (或)
如果您需要更多的资源,请考虑查看。
< P>更新的java版本支持<代码> NB<代码>(NordsBokkl)区域: 我的Java 9.0.4上的输出:januar
februar
mars
april
mai
juni
juli
august
september
oktober
november
desember
在Java1.8.0_101上,我得到了相同的输出
现在是2018年,所以我当然在使用java.time,这是现代java日期和时间API(不再是设计拙劣的DateFormat
,SimpleDateFormat
和Calendar
)
对于想要为不同语言环境提供名称(或对从nb
locale获得的输出不满意)的人,有两个选项:
- 您可以提供自己的
实现CalendarNameProvider
- 您可以使用
及其DateTimeFormatterBuilder
方法的重载版本,该方法接受用于格式化和解析的名称映射appendText
ResourceBundle
。如果是这样的话,这可能会有帮助:@Bhesh:OP想要为特定的月份定义自定义月份名称。Java不使用任何语言nb
,因此它将默认使用英语月份名称。这与ResourceBundle
API无关。到目前为止,这是一个相当老的问题-您是否找到了解决方案?它可能会变得有点复杂,但由于Java 8,您可能会看到a是否可以帮助您。
januar
februar
mars
april
mai
juni
juli
august
september
oktober
november
desember