java - 如何在 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
请注意,这DateTimeFormatterBuilder
是现代日期时间 API 的一部分。
如果您正在为您的 Android 项目执行此操作,并且您的 Android API 级别仍然不符合 Java-8,请通过 desugaring和How to use ThreeTenABP in Android Project检查Java 8+ APIs available。
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
推荐阅读
- javascript - 如何在父子层次结构中显示表格?
- powershell - 位置等于 1 或没有参数值的单个参数参数?
- laravel - 安装 setasign/fpdi_pdf-parser 时作曲家安装
- javascript - 单击浏览器后退按钮时忽略滚动事件
- java - 解密时出现错误填充异常但仍然有效
- c# - 将带有图像的 datagridview 数据从 SQL Db 转换为 PDF
- c# - 在c#中识别所有类型的压缩文件
- ios - 谷歌地图未在 Flutter 的 IOS 设备中加载
- postgresql - Phoenix Ecto 模型嵌套
- go - 为什么我的两个切片之一因“运行时错误:索引超出范围”而恐慌?