问题描述
我正在尝试获取巴基斯坦语言环境“ 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
请注意,DateTimeFormatterBuilder
是the modern date-time API的一部分。
如果您正在为自己的Android项目执行此操作,并且您的Android API级别仍不符合Java-8,请选中Java 8+ APIs available through desugaring和How 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