ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

如何在Java中使用不受支持的Locale

2019-06-11 10:50:03  阅读:275  来源: 互联网

标签:java locale date-formatting icu4j


作为国际化的一部分,需要支持少数国家
喜欢

安提瓜和巴布达 – 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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有