相关疑难解决方法(0)

JDK dateformater在德语语言环境中解析DayOfWeek,java8 vs java9

我在Java 8(1.8.0_77)和Java 9(Java HotSpot(TM)64位服务器VM(构建9 + 181,混合模式)中尝试了一些代码)

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
DayOfWeek mo = dtf.parse("Mo", DayOfWeek::from);
System.out.println("mo = " + mo);
Run Code Online (Sandbox Code Playgroud)

我不太熟悉这些类的细节,但在Java 8中这个工作,打印:

mo =星期一

在Java 9中,它失败了

线程"main"中的异常java.time.format.DateTimeParseException:无法在java.base上的java.base/java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:1988)的索引0处解析文本"Mo"在day.main(day.java:10)的/java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1890)

任何想法,这是可重现的吗?

因此,在格式化时:使用此代码:

DateTimeFormatter dtf = DateTimeFormatter.ofPattern("eee", Locale.GERMAN);
String format = dtf.format(DayOfWeek.MONDAY);
System.out.println("format = " + format);
Run Code Online (Sandbox Code Playgroud)

jdk1.8.0-77:

格式= Mo.

jdk-9(build 9 + 181)

格式= Mo.

java java-8 java-time java-9

16
推荐指数
2
解决办法
639
查看次数

如何修改DateFormatSymbols月份值

我正在尝试为特定区域设置添加特定月份名称.我遇到的问题是挪威语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()));
}
Run Code Online (Sandbox Code Playgroud)

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()));
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用特定的DateFormatSymbols配置SimpleDateFormat但是这无助于保持我的代码对于任何未来的本地人都是通用的.我想知道是否有人知道如何修改受支持的java语言环境的默认月份值?我想我会添加一个资源文件,但无法弄清楚如何.

java

7
推荐指数
1
解决办法
1033
查看次数

标签 统计

java ×2

java-8 ×1

java-9 ×1

java-time ×1