本地化数字和日期格式,但不数字化符号

问题描述 投票:0回答:1

我有一个用例,我想根据用户区域设置显示日期和数字。

我分别使用DateFormat.getDateInstance(DateFormat.MEDIUM,locale)和NumberFormat.getNumberInstance(locale)。

我面临的问题是,DateFormat和NumberFormat也在根据语言环境更改数字,这不是我想要的。希望最终的字符串仅使用阿拉伯数字(0-9)。

例如,

对于一个值,为53.54在hi_IN中,它变成५३.५४

在de_DE中,变为53,54

我希望它看起来像,

在hi_IN中,53.54

在de_DE中,53,54

是否使用。或,因为小数点分隔符应基于语言环境,但数字应为阿拉伯语。在日期转换中面临类似的问题。

感谢您的任何帮助!

java locale number-formatting date-format
1个回答
0
投票

虽然我无法重现您描述的行为,但我[[可以向您展示如何控制格式化程序使用的数字。

NumberFormat nf = NumberFormat.getNumberInstance(); if (nf instanceof DecimalFormat) { DecimalFormat df = (DecimalFormat) nf; // Hindi digits char ch0 = '\u0966'; // Hindi zero DecimalFormatSymbols symbols = df.getDecimalFormatSymbols(); symbols.setZeroDigit(ch0); df.setDecimalFormatSymbols(symbols); System.out.println(nf.format(53.54)); // Western digits symbols.setZeroDigit('0'); // Western zero df.setDecimalFormatSymbols(symbols); System.out.println(nf.format(53.54)); } else { System.out.println("Cannot control digits for this formatter"); }
在我的计算机上,此代码段的输出是:

५३.५४ 53.54
我们仅指定零数字,即用于0的字符。格式化程序从中计算出其他数字本身。

为了格式化日期,我非常热烈地推荐java.time,现代的Java日期和时间API及其DateTimeFormatter

DateTimeFormatter dateFormatter = DateTimeFormatter .ofLocalizedDate(FormatStyle.SHORT).withLocale(Locale.GERMAN); // Hindi digits DecimalStyle style = dateFormatter.getDecimalStyle().withZeroDigit(ch0); DateTimeFormatter hindiDateFormatter = dateFormatter.withDecimalStyle(style); System.out.println(LocalDate.now(ZoneId.of("Europe/Vienna")).format(hindiDateFormatter)); // Western digits style = dateFormatter.getDecimalStyle().withZeroDigit('0'); DateTimeFormatter westernDateFormatter = dateFormatter.withDecimalStyle(style); System.out.println(LocalDate.now(ZoneId.of("Europe/Zurich")).format(westernDateFormatter));

१२.१२.१९ 12.12.19
众所周知,您在问题中尝试使用的DateFormat类非常麻烦且已过时。

Link: Oracle tutorial: Date Time解释如何使用java.time。

© www.soinside.com 2019 - 2024. All rights reserved.