Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java.text.DateFormat中使用不受支持的区域设置_Java_Date_Locale_Date Format - Fatal编程技术网

如何在java.text.DateFormat中使用不受支持的区域设置

如何在java.text.DateFormat中使用不受支持的区域设置,java,date,locale,date-format,Java,Date,Locale,Date Format,我正在尝试获取巴基斯坦地区“en_PK”的日期格式,即“dd/MM/yy” 上面的代码段返回“MM/dd/yy” 但是区域设置似乎不受支持,并且在DateFormat.getAvailableCales()列表中不可用 请建议解决此问题的理想方法。请提前感谢。在导航DateFormat.getAvailableCales()时,使用Locale对象搜索国家名称,并在找到后中断循环 import java.text.DateFormat; import java.time.LocalDate; i

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

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

但是区域设置似乎不受支持,并且在
DateFormat.getAvailableCales()
列表中不可用


请建议解决此问题的理想方法。请提前感谢。

在导航
DateFormat.getAvailableCales()
时,使用
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
10/10/2020
请注意,
DateTimeFormatterBuilder
是的一部分

如果您是为您的Android项目执行此操作,并且您的Android API级别仍然不符合Java-8,请检查并重试

java.util
date-time类已经过时且容易出错,它们的格式化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
10/10/2020

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