【问题标题】:How to use Unsupported Locales in java.text.DateFormat如何在 java.text.DateFormat 中使用不受支持的语言环境
【发布时间】:2020-10-07 13:44:20
【问题描述】:

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

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

上面的sn-p返回“MM/dd/yy”

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

请提出解决此问题的理想方法。提前致谢。

【问题讨论】:

  • 您可以编写一个返回格式化日期的包装类。在可用时使用区域设置,并在区域设置不存在时使用特定的 DateTimeFormatter。
  • 重新打开它,因为OP提到的问题是如何从DateFormat.getAvailableLocales()列表中找到Pakistan的语言环境。

标签: java date locale date-format


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2013-01-10
    • 2020-04-05
    • 2021-03-11
    • 2012-08-30
    • 1970-01-01
    • 2011-02-28
    • 2019-02-26
    相关资源
    最近更新 更多