java - 从当前区域设置检索日期格式模式
问题描述
我想检索当前的日期格式。没有格式化日期,我需要的是格式,例如MM/dd/yyyy
或dd/MM/yyyy
取决于当前的语言环境。我有一个验证,检查用户是否从调整到他的国家的输入中输入了正确的日期。
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.SHORT, Locale.US);
String format = ((SimpleDateFormat)dateFormat).toPattern();
System.out.println(format); // M/d/yy
正如您在上面看到的输出与我想看到的不同,我不明白为什么它返回这种格式而不是MM/dd/yyyy
在那种情况下,任何想法如何检索当前语言环境的模式?
解决方案
我发现您的要求自相矛盾且不可能。充其量是在尝试滥用内置的本地化格式。
如果您想要美国语言环境的本地化格式,请使用DateTimeFormatterBuilder.getLocalizedDateTimePattern()
:
String dateFormatPattern = DateTimeFormatterBuilder
.getLocalizedDateTimePattern(FormatStyle.SHORT, null,
IsoChronology.INSTANCE, Locale.US);
System.out.println(dateFormatPattern);
输出为(在 JDK 11 上测试):
月/日/年
或FormatStyle.MEDIUM
代替FormatStyle.SHORT
:
嗯 d, y
另一方面,如果您想要MM/dd/yyyy
,只需直接指定:
String dateFormatPattern = "MM/dd/yyyy";
要求前一个代码给出后一个结果是没有意义的。来自 CLDR 的语言环境数据是满足每种文化期望的最佳尝试,正如 Basil Bourque 所说,它们经常被争论。一般来说,我建议您相信 CLDR 比您更了解不同文化的期望,毕竟他们所做的努力是您永远无法独自完成的。另一方面,您更了解自己的用户,而且我们需要硬编码与内置格式不同的格式以满足我们自己的用户的情况并不少见。
推荐阅读
- matlab - 'double' 类型的输入参数的未定义函数 'equation'
- python - 取函数矩阵的逆
- swift - Swift、macOS、带有 2 个 GPU 的 mac,矩阵运算在一个 GPU 上工作,而不是在另一个 GPU 上工作
- python-3.x - Numpy __isub__ 改变全局变量
- php - 在 PHP 脚本中使用 exec(convert) 时出现错误“转换:找不到命令”
- sql - regexp_substr 字符串中的数字比率
- android - 在 Chrome OS 中的 Linux beta 上安装 .apk 时出错
- java - 以相同顺序重复数组 x 中的元素
- performance - OpenCL clCreateContextFromType 函数导致内存泄漏
- driver - 可签名性未通过 Windows 驱动程序测试