如何在Java中使用不受支持的Locale
作者:互联网
作为国际化的一部分,需要支持少数国家
喜欢
安提瓜和巴布达 – ISO3166代码 – AG&
多米尼加共和国 – ISO3166代码 – DO
Locale loc = new Locale("en", "AG");
DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, loc);
System.out.println("Short format: " + df1.format(new Date()));
Java将以mm / dd / yy格式显示日期,其中这些国家/地区的日期格式为dd / mm / yy.
有什么方法可以达到dd / mm / yy的模式吗?
甚至ICU4J图书馆也不支持这些国家?
提前致谢
解决方法:
您可以通过基于相应的服务提供者接口(SPI)创建扩展来将其他语言环境添加到Java运行时.
例如,如果要为Antigua和Barbuda(en_AG)指定短日期格式,可以按如下方式实现java.text.spi.DateFormatProvider SPI:
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.text.spi.DateFormatProvider;
import java.util.Locale;
public class EnAgDateFormatProvider extends DateFormatProvider {
private static final Locale EN_AG_LOCALE = new Locale("en", "AG");
public DateFormat getDateInstance(int style, Locale locale) {
// if your extension supports multiple locales, you have to take the locale
// parameter into account as well
switch (style) {
case DateFormat.SHORT:
return new SimpleDateFormat("dd/MM/yy");
default:
// TODO implement other styles
return null;
}
}
public DateFormat getTimeInstance(int style, Locale locale) {
// TODO implement this method
return null;
}
public DateFormat getDateTimeInstance(int dateStyle, int timeStyle,
Locale locale) {
// TODO implement this method
return null;
}
public Locale[] getAvailableLocales() {
return new Locale[]{EN_AG_LOCALE};
}
}
这需要打包在JAR文件中,在JAR的META-INF / services目录中,您需要创建一个名为java.text.spi.DateFormatProvider的文件.该文件需要包含提供者的完全限定名称,在我的情况下:
EnAgDateFormatProvider
创建JAR后,需要将其放在JRE的extensions目录中.在我的Ubuntu机器上,这恰好是/usr/lib / jvm / java-8-oracle / jre / lib / ext /.
之后,您问题的代码段:
Locale loc = new Locale("en", "AG");
DateFormat df1 = DateFormat.getDateInstance(DateFormat.SHORT, loc);
System.out.println("Short format: " + df1.format(new Date()));
将打印出来:
Short format: 16/02/2017
参考文献:
> https://blogs.oracle.com/naotoj/entry/about_the_locale_sensitive_services
> http://docs.oracle.com/javase/8/docs/api/java/util/spi/LocaleServiceProvider.html
> https://docs.oracle.com/javase/tutorial/ext/basics/install.html
标签:java,locale,date-formatting,icu4j 来源: https://codeday.me/bug/20190611/1218004.html