您可以通过基于适当的服务提供者接口 (SPI) 创建扩展来向 Java 运行时添加其他语言环境。
例如,如果您想为安提瓜和巴布达 (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 文件中,并且在META-INF/services
JAR 的目录中,您需要创建一个名为java.text.spi.DateFormatProvider
. 该文件需要包含您的提供者的完全限定名称,在我的例子中只是:
EnAgDateFormatProvider
创建 JAR 后,您需要将它放到 JRE 的扩展目录中。在我的 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
参考: