首页 > 解决方案 > 从当前区域设置检索日期格式模式

问题描述

我想检索当前的日期格式。没有格式化日期,我需要的是格式,例如MM/dd/yyyydd/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在那种情况下,任何想法如何检索当前语言环境的模式?

标签: javadate

解决方案


我发现您的要求自相矛盾且不可能。充其量是在尝试滥用内置的本地化格式。

如果您想要美国语言环境的本地化格式,请使用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 比您更了解不同文化的期望,毕竟他们所做的努力是您永远无法独自完成的。另一方面,您更了解自己的用户,而且我们需要硬编码与内置格式不同的格式以满足我们自己的用户的情况并不少见。


推荐阅读