如何在java.text.DateFormat中使用不受支持的语言环境

问题描述

我正在尝试获取巴基斯坦语言环境“ en_PK”的日期格式,即“ dd / MM / yy”

Locale localePK = new Locale("en","PK");
DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,localePK);

上面的代码段返回“ MM / dd / yy”

但是语言环境似乎不受支持,并且在DateFormat.getAvailableLocales()列表中不可用。

请提出解决此问题的理想方法。预先感谢。

解决方法

在导航Locale的同时,使用DateFormat.getAvailableLocales()对象搜索国家/地区名称,并在找到它后中断循环。

import java.text.DateFormat;
import java.time.LocalDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.time.format.FormatStyle;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale localePk = null;
        for (Locale locale : DateFormat.getAvailableLocales()) {
            if (locale.getDisplayCountry().equals("Pakistan")) {
                localePk = locale;
                break;
            }
        }
        if (localePk != null) {
            String datePattern = DateTimeFormatterBuilder.getLocalizedDateTimePattern(FormatStyle.SHORT,null,IsoChronology.INSTANCE,localePk);
            System.out.println(LocalDate.now().format(DateTimeFormatter.ofPattern(datePattern,localePk)));
        }
    }
}

输出:

10/10/2020

请注意,DateTimeFormatterBuilderthe modern date-time API的一部分。

如果您正在为自己的Android项目执行此操作,并且您的Android API级别仍不符合Java-8,请选中Java 8+ APIs available through desugaringHow to use ThreeTenABP in Android Project

java.util日期时间类已过时且容易出错,其格式化API DateFormat也是如此。但是,如果您仍在寻找使用这些旧版API的解决方案,请参考以下内容:

import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;

public class Main {
    public static void main(String[] args) {
        Locale localePk = null;
        for (Locale locale : DateFormat.getAvailableLocales()) {
            if (locale.getDisplayCountry().equals("Pakistan")) {
                localePk = locale;
                break;
            }
        }
        if (localePk != null) {
            DateFormat df = DateFormat.getDateInstance(DateFormat.SHORT,localePk);
            System.out.println(df.format(new Date()));
        }
    }
}

输出:

10/10/2020