本练习来自Horstmann的书 Core Java for the greatient :
编写一个程序,演示泰国[泰国数字]的日期和时间格式样式。
我尝试使用以下代码解决练习:
Locale locale = Locale.forLanguageTag("th-TH-TH");
LocalDateTime dateTime = LocalDateTime.now();
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(formatter.withLocale(locale).format(dateTime));
问题是虽然月份的名称是用泰语给出的(至少我是这么认为的,因为我不懂泰语),这些数字仍然用阿拉伯数字格式化,输出如下:
3ก。ย。 2017,22:42:16
我尝试了不同的语言标记("th-TH"
,"th-TH-TH"
,"th-TH-u-nu-thai"
)无济于事。我应该更改什么才能使程序按预期运行?我在Windows 10 64位上使用JDK 1.8.0_131。
答案 0 :(得分:4)
DateTimeFormatter::withDecimalStyle
我能够解决这个问题。必须通过调用DecimalStyle
将DateTimeFormatter::withDecimalStyle
传递给格式化程序,如下所示(请参阅粗体中的代码进行更改):
Locale locale = Locale.forLanguageTag("th-TH-u-nu-thai");
LocalDateTime dateTime = LocalDateTime.now();
DecimalStyle style = DecimalStyle.of(locale);
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.MEDIUM);
System.out.println(formatter.withLocale(locale).withDecimalStyle(style).format(dateTime));